我是WPF的新手,並且遇到了問題。 我必須爲模型實現GUI。 在這個模型中有括號,文件,表單和圖像。 每個支架可以容納更多的支架或文件。每個文檔都可以放置紙張。每張紙都有圖像。每個元素都將子元素保存在列表中。 所以一個支架有一個括號和文件列表,文件的列表... 所以我有一個HierarchicalDataTemplate這個結構,它的工作原理。WPF TreeView與列表
但現在我想編輯數據(移動或刪除一些項目)我不知道如何告訴樹更新。
我現在的ObservableCollection和我使用這些爲根託槽(因爲它沒有問題,讓他們在那裏),但我不想通過每個括號和每個文件和每張表,並使每個列表在我的方式一個ObservableCollection。
我可以通知我的樹有關在圖表列表中所做的更改嗎?
我的視圖(不是全部,但重要的事情)
<DockPanel.Resources>
<HierarchicalDataTemplate DataType="{x:Type m:Bracket}" ItemsSource="{Binding Path=Items}">
<TextBlock Text="{Binding Name}"></TextBlock>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type m:Document}" ItemsSource="{Binding Path=Sheets}">
<TextBlock Text="{Binding Name}"></TextBlock>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type m:Sheet}" ItemsSource="{Binding Path=Images}">
<TextBlock Text="{Binding Name}"></TextBlock>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type m:IPSImage}">
<Image Source="{Binding ImageUri}" Width="150" Margin="0,5,0,0"></Image>
</HierarchicalDataTemplate>
</DockPanel.Resources>
<ToolBar DockPanel.Dock="Top">
<Button Command="{Binding OpenAllCommand}">Alle Öffnen</Button>
<Button Command="{Binding MoveItemUpCommand}">Nach Oben</Button>
</ToolBar>
<TreeView ItemsSource="{Binding Path=Brackets}" Height="Auto" BorderThickness="0" DockPanel.Dock="Top" VerticalAlignment="Top">
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="{Binding Path=DataContext.ExpandTreeViewItems, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" />
</Style>
</TreeView.ItemContainerStyle>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectedItemChanged">
<cmd:EventToCommand Command="{Binding SelectedItemChangedCommand}" PassEventArgsToCommand="True"></cmd:EventToCommand>
</i:EventTrigger>
</i:Interaction.Triggers>
</TreeView>
視圖模型:
//每個支架創建新的文件和每個文件在構造
private ObservableCollection<Bracket> m_Brackets;
public TreeViewModel()
{
m_Brackets = new ObservableCollection<Bracket>();
m_Brackets.Add(new Bracket());
if (m_Brackets[0] != null)
{
m_Brackets[0].Brackets.Add(new Bracket(m_Brackets[0].Id));
}
m_Brackets.Add(new Bracket());
}
創建新表所以當我刪除m_Brackets/Documents中的一張紙時,什麼都不會發生。 我嘗試調用RaisePropertyChanged(「表格」),但沒有任何結果。
當我調用Tree.Items.Refresh()一切都很好,但我認爲這是不可能的或?
感謝每一個幫助 丹尼爾
謝謝 我將嘗試使用ObservableCollection實現所有。 我認爲它是最簡單的(也許是唯一的)方法。 感謝您的幫助 – user3333428