我在WPF中實現了一個TreeView,它通過XElement類綁定到某些XML數據。第一次裝入XML文件時,綁定工作正常。所有數據按預期填充樹。當我添加和刪除元素時會發生問題,因爲TreeView中沒有任何事情發生。現在我已經做到了這一點',我相信我記得不必爲這項工作做任何額外的工作。至少對於從樹中添加和移除項目的簡單情況而言。我記得很驚訝,這沒有任何額外的編碼工作。我再也無法訪問該代碼,因此我不能只看看我已經做了什麼。所以我有點爲難,爲什麼我現在無法讓這個工作。通過XElement處理數據綁定XML數據的TreeView更新問題
我的WPF代碼如下。
<Window.Resources>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Elements}" x:Key="ViewEditTreeTemplate">
<StackPanel Orientation="Horizontal" Margin="2">
<Label x:Name="ElementHeaderLabel" Padding="1" VerticalContentAlignment="Center" FontSize="16" Content="{Binding Path=DisplayName}" />
</StackPanel>
</HierarchicalDataTemplate>
</Window.Resources>
<Grid>
<TreeView Name="DataTree" ItemTemplate ="{Binding Source={StaticResource ViewEditTreeTemplate}}" Margin="0,0,0,53" />
</Grid>
我附加在後面的代碼如下我的XML文檔。請記住,由於樹自動填充來自XML數據的信息就好了,因此這看起來很有效。
XElement NewElement = new XElement(XElement.Load(FilePath));
List<XElement> TempList = new List<XElement>();
TempList.Add(NewElement);
DataTree.ItemsSource = TempList;
在當我去添加或刪除元素後面的代碼我做如下:
// When removing an element
Element.Remove(); //Element is of type XElement
// When adding an element
ParentElement.Add(NewElement); //ParentElement and NewElement are of type XElement
我有這種強烈的感覺,我以前這樣做的時候,我居然沒得做任何特別的事。 .Remove()和.Add()例程以某種方式通知綁定,即.Elements()中的項目已更改並且屏幕自動更新。無論如何,這次不會工作。有誰知道爲什麼?
您是否嘗試過ObservableCollection而不是列表 –
mbursill
我沒有嘗試過,但我只是做了,沒有任何改變。我沒有想到它能夠正常工作。該集合只能用於最高級別。在第一個元素之後,由.Elements()返回的集合將填充樹並將與綁定進行交互。 – Ultratrunks