ObservableCollection中的项目不更新视图

Dou*_*oug 2 wpf xaml binding observablecollection

我在这里难过.我有一个可观察的集合,用于存放业务对象.我把它绑定到ListBox的ItemsSource.我正在更新我的对象的X和Y,它在运行时在UI中正确显示,因为它绑定了Item top和Left.但是,这就是问题所在.我还绑定了一些要在textblock文本属性中显示的数据,数据只显示初始值.它永远不会更新文本块文本,无论我更改它多少次.

这是XAML.如果您发现XAML有问题,请告诉我.就像我说的那样,X/Y - Top/Left绑定工作正常并且在更改时更新,绑定到DisplayData的TextBlock不会.

此外,我的集合中的业务对象确实实现了INotifyPropertyChanged.

如果仅通过查看XAML无法给出答案,我将尝试制作一个小型演示来复制它.

<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="614" Width="674">

<ListBox Name="PlottingBox" Background="White">

    <ListBox.ItemTemplate>

        <DataTemplate>

            <TextBlock Text="{Binding Path=DisplayData}" />

        </DataTemplate>

    </ListBox.ItemTemplate>

    <ListBox.Template>

        <ControlTemplate TargetType="{x:Type ListBox}">

            <Border Background="{TemplateBinding Background}"

                BorderBrush="{TemplateBinding BorderBrush}"

                BorderThickness="{TemplateBinding BorderThickness}">

                <Canvas IsItemsHost="True" />

            </Border>

        </ControlTemplate>

    </ListBox.Template>

    <ListBox.ItemContainerStyle>

        <Style TargetType="{x:Type ListBoxItem}">

            <Setter Property="Canvas.Left" Value="{Binding Path=PlotX}" />

            <Setter Property="Canvas.Top" Value="{Binding Path=PlotY}" />

         </Style>

    </ListBox.ItemContainerStyle>

</ListBox>
Run Code Online (Sandbox Code Playgroud)

Anv*_*aka 5

我认为问题在于背后的代码.您的XAML绝对合法且看起来不错.但在发布源代码之前,请确保满足以下条件:

  1. 您的业​​务对象实现了INotifyPropertyChanged接口,并且每次更改DisplayData值时都会引发PropertyChanged事件.

  2. 没有错别字.既不在DipslayData属性定义中也不在PropertyChangedEventArgs中传递"DispayData"属性名称.

  3. ListBoxItem的DataContext是您的业务对象的类型.用Snoop检查一下.

  4. 运行时没有绑定错误.在调试中运行您的应用程序并检查"输出"窗口.您也可以使用Snoop进行检查.

希望在完成此检查清单后,您将获得答案.

干杯:)