DataTemplate 似乎缓存了导致错误值的绑定自定义对象
DataTemplate seems to cache bound custom object resulting in wrong values
我的 WPF 应用程序中有一个自定义 TreeListView
(基于 TreeView
)。 ItemSource
绑定到 ObservableCollection<Node>
,其中 Node
是基于 TreeListViewItem
的自定义 class,因此是 TreeItem
。它包含应该显示的值。
加载新节点时,列与 Node
中的值的绑定起作用(我实现了延迟加载,ItemSource 经常更改(添加了新的 Node
s), UI), 但是当 Node 中的值发生变化时,UI 中的值不会改变。
我创建了一个 DataTemplate
触发器来测试行为:
<DataTemplate x:Key="CellTemplate_Speicherplatz">
<TextBlock Name="tbSpeicherplatz" TextAlignment="Right">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="{Binding RecSpeicherplatz, RelativeSource={RelativeSource AncestorType={x:Type k:Node}}}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding DataContext.IsProcessing, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" Value="False">
<Setter Property="Text" Value="{Binding RecSpeicherplatz, RelativeSource={RelativeSource AncestorType={x:Type k:Node}}}"/>
</DataTrigger>
<DataTrigger Binding="{Binding DataContext.IsProcessing, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" Value="True">
<Setter Property="Text" Value="..."/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
这会导致以下行为:虽然 IsProcessing
为真,但 UI 中的文本为“...”。当 IsProcessing
更改为 false 时,即使变量已在 Node
中更改,也会显示 RecSpeicherplatz
的旧值。
有人可以解释为什么会这样以及如何解决这个问题吗?
Node class 是否实现了 INotifyPropertyChanged 接口? 属性 RecSpeicherplatz 更改时是否引发 PropertyChanged 事件?
我的 WPF 应用程序中有一个自定义 TreeListView
(基于 TreeView
)。 ItemSource
绑定到 ObservableCollection<Node>
,其中 Node
是基于 TreeListViewItem
的自定义 class,因此是 TreeItem
。它包含应该显示的值。
加载新节点时,列与 Node
中的值的绑定起作用(我实现了延迟加载,ItemSource 经常更改(添加了新的 Node
s), UI), 但是当 Node 中的值发生变化时,UI 中的值不会改变。
我创建了一个 DataTemplate
触发器来测试行为:
<DataTemplate x:Key="CellTemplate_Speicherplatz">
<TextBlock Name="tbSpeicherplatz" TextAlignment="Right">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="{Binding RecSpeicherplatz, RelativeSource={RelativeSource AncestorType={x:Type k:Node}}}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding DataContext.IsProcessing, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" Value="False">
<Setter Property="Text" Value="{Binding RecSpeicherplatz, RelativeSource={RelativeSource AncestorType={x:Type k:Node}}}"/>
</DataTrigger>
<DataTrigger Binding="{Binding DataContext.IsProcessing, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" Value="True">
<Setter Property="Text" Value="..."/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
这会导致以下行为:虽然 IsProcessing
为真,但 UI 中的文本为“...”。当 IsProcessing
更改为 false 时,即使变量已在 Node
中更改,也会显示 RecSpeicherplatz
的旧值。
有人可以解释为什么会这样以及如何解决这个问题吗?
Node class 是否实现了 INotifyPropertyChanged 接口? 属性 RecSpeicherplatz 更改时是否引发 PropertyChanged 事件?