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)
我认为问题在于背后的代码.您的XAML绝对合法且看起来不错.但在发布源代码之前,请确保满足以下条件:
您的业务对象实现了INotifyPropertyChanged接口,并且每次更改DisplayData值时都会引发PropertyChanged事件.
没有错别字.既不在DipslayData属性定义中也不在PropertyChangedEventArgs中传递"DispayData"属性名称.
ListBoxItem的DataContext是您的业务对象的类型.用Snoop检查一下.
运行时没有绑定错误.在调试中运行您的应用程序并检查"输出"窗口.您也可以使用Snoop进行检查.
希望在完成此检查清单后,您将获得答案.
干杯:)
| 归档时间: |
|
| 查看次数: |
9709 次 |
| 最近记录: |