I는 3 층 깊이가 트리 뷰에서의 데이터 바인딩과 UI,상쾌한 WPF
-MAIN ->:SUB1 >:SUB2 >:SUB2 -X:SUB1 X:SUB2 SUB1 SUB1
> 및 X는 (백엔드 결정) 특정 항목의 상태를 나타내는 그래픽을 나타낸다.
Observable Dictionary를 사용하여이 트리에 바인딩합니다 (ICollectionChanged 이벤트가 있음). . 위에서 언급 한 그래픽, 그것은 (즉 < IMG 소스 바인더 제본 할 수 있도록 경로 = "{바인딩 경로 상태 열거를 변환하는 사용자 정의 변환기를 사용하여 바인더 제본하는
ObservableDictionary<string,CustomClass> mainitems;
public class CustomClass{
ObservableDictionary<string, InnerClass> sub1item;
// Bunch of properties and methods in this class
// INotify not implemented
}
public class InnerClass{
// Bunch of properties and methods in this class
// INotify not implemented
public SomeEnum Status{
get{ return this.status; }
}
}
: 구조는 다음과 같이이다 = 무언가, 변환기 = {StaticResource someconverter}, 모드 = 원 웨이 "/ >).
질문 : 나는 새로운 상태로에서는 CustomClass의 sub1item 사전을 업데이트 할 때
내 문제는, 그것이 UI에 업데이트하지 않습니다. INotify 작업을 구현하는 것이 효과적 일지 모르지만 어디서 업데이트해야하는지 정확히 어떻게해야하는지 모르겠습니다.
편집 :
<TreeView Name="tvInstance" ItemsSource="{Binding}" TreeViewItem.Selected="tviSelected" IsTextSearchEnabled="True">
<TreeView.ItemContainerStyle>
<Style>
<Setter Property="TreeViewItem.IsExpanded" Value="{Binding Path=Value.Expanded, Mode=TwoWay}" />
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Value.CustomClass}" ItemContainerStyle="{x:Null}">
<StackPanel Orientation="Horizontal">
<Label Content="{Binding Path=Key}"/>
</StackPanel>
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Value.AnotherClass}">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Path=Value.Status, Converter={StaticResource convertstatus} }"
Width="10" Height="10"/>
<Label Content="{Binding Path=Key}" />
</StackPanel>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Path=Value, Converter={StaticResource convertstatus} }"
Width="10" Height="10"/>
<Label Content="{Binding Path=Key}" />
</StackPanel>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
편집 : 내 mainclass 내에서는 CustomClass, 내 InnerClass의 모든 INotifyProperty 이벤트를 추가 한 후, 그것은 여전히 작동하지 않는 다음과 같이 트 리뷰에 대한 내 XAML 템플릿입니다 . ObservableDictionary의 Dr. WPF 버전을 사용하고 있습니다. 사전을 사용하는 것은 많은 조회가 필요하므로 내 응용 프로그램에 중요합니다. 도움! 그에서 INotifyPropertyChanged 내가 UI 업데이트하려는 속성에 구현 될 필요가에
에필로그
이 페이지의 답변은 정확합니다.
사전을 바인딩하면 너무 많은 문제가 발생하여 ObservableCollection과 Dictionary를 모두 유지한다는 것을 알았습니다. 검색과 바인딩을위한 사전을 사용했습니다. (둘 다 객체에 대한 동일한 참조를 사용하기 때문에 콜렉션과 O (n) 연산만으로 쉽게 제거 할 수있었습니다).
UI 업데이트와 관련하여이 페이지의 다른 게시물을 참조하십시오.
sub1item 사전을 다시 인스턴스화합니까? 그렇다면 INotifyPropertyChanged를 포함하는 클래스에 INotifyPropertyChanged를 구현해야합니다. – rmoore
CustomClass에는 sub1item = new ObservableDictionary를 설정하는 Refresh() 메서드가 있습니다. <..>(); 그런 다음 모든 InnerClass 항목을 다시 가져옵니다. 그러나, 그들은 거의 같은 항목입니다.난 단지 변경된 것들을 업데이트하고 싶다. 예. 변경 사항을 철회하십시오. – apandit
이 문제를 해결할 방법을 찾았습니까? – Zenuka