我有一個綁定到某些XML數據的DataGrid。刷新WPF中的單個項目CollectionCollection
當我在XML數據中進行更改時,DataGrid不刷新以反映這些更改。
解決此問題的「簡單」方法是在每次進行更改時調用MyDataGrid.Items.Refresh()。
但是,這是laggy,似乎相當低效。
我該如何刷新一個單個的行,而不是整個數據網格?我可以輕鬆訪問DataGridRow以及已更改的XmlElement,但我只是不知道要調用哪個函數。
一直在這個問題上停留了3-4個小時,現在已經嘗試了幾十種解決方案,但卻無法讓它正常工作。
下面是相關的代碼。
A)定義樣式。
<!-- Field Value Style -->
<local:FieldValueConverter x:Key="FieldValueConverter"/>
<local:Node x:Key="Node"/>
<Style x:Key="fieldValueStyle" TargetType="{x:Type TextBlock}">
<Setter Property="Text" Value="{Binding ., Converter={StaticResource FieldValueConverter}}"/>
<Setter Property="KeyboardNavigation.IsTabStop" Value="False"/>
<Setter Property="Focusable" Value="False"/>
</Style>
B)定義的DataGrid
<DataGrid x:Name="FieldPanelDataGrid" DockPanel.Dock="Left"
AutoGenerateColumns="False"
DataContext="{Binding ElementName=ObjectPanelListBox, Path=SelectedItem}"
ItemsSource="{Binding}"
IsSynchronizedWithCurrentItem="True"
IsReadOnly="True"
CanUserResizeRows="False"
CanUserResizeColumns="True"
KeyboardNavigation.IsTabStop="False"
Visibility="Visible"
SelectionMode="Single">
<DataGrid.Resources>
<Style TargetType="DataGridRow">
<EventSetter Event="MouseDoubleClick" Handler="FieldCell_MouseDoubleClick"/>
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="FieldCell_PreviewMouseLeftButonDown"></EventSetter>
<EventSetter Event="PreviewKeyDown" Handler="FieldCell_PreviewKeyDown"></EventSetter>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn x:Name="FieldName" Header="Name" CanUserSort="False" ElementStyle="{StaticResource fieldNameStyle}"/>
<DataGridTextColumn x:Name="FieldValue" Header="Value" Width="*" ElementStyle="{StaticResource fieldValueStyle}"/>
</DataGrid.Columns>
</DataGrid>
您可以從源集合中移除已更改的XmlElement,然後將其重新插入到相同的位置嗎?它可以工作.. – 2014-10-01 22:04:23
也許首先向我們展示讀取XML並填充數據網格的代碼。另外,對應用程序外部的XML(文件)進行了更改?如果是這樣,也許你可以掛接一個filesystemwatcher來觀看你的xml文件,並相應地更新你的數據網格。 – failedprogramming 2014-10-01 22:04:38
@ h.alex:好的想法。我得到了一個錯誤:「雖然ItemsSource正在使用時操作無效,但使用ItemsControl.ItemsSource訪問和修改元素」。和失敗的編程:我用一些代碼更新了原文。這些更改在應用程序內。 – Brent 2014-10-01 22:22:11