DataTemplate似乎缓存绑定的自定义对象,导致错误的值

时间:2015-07-29 08:39:38

标签: wpf xaml mvvm datatemplate treelistview

我的WPF应用程序中有一个自定义TreeListView(基于TreeView)。 ItemSource绑定到ObservableCollection<Node>,其中Node是一个基于TreeListViewItem的自定义类,因此是TreeItem。它包含应显示的值。

当加载新节点时,列与Node中的值的绑定工作(我实现了一个延迟加载,ItemSource经常更改(添加了新的Node),UI也是如此) ,但是当节点中的值发生更改时,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为true时,UI中的文本为“...”。当IsProcessing更改为false时,即使RecSpeicherplatz中的变量已更改,也会显示Node的旧值。

有人可以解释为什么它表现得那样以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

Node类是否实现了INotifyPropertyChanged接口?当RecSpeicherplatz属性发生变化时,您是否引发了PropertyChanged事件?