【发布时间】:2011-12-01 12:00:20
【问题描述】:
我遇到了数据绑定问题。我在 XAML 中定义了一个应用程序资源,如下所示:
<Application.Resources>
<local:DataModel x:Key="myDataModel"/>
</Application.Resources>
我将该模型绑定到一个列表,如下所示:
<ListView Name="ListBox"
ItemsSource="{Binding Source={StaticResource myDataModel}, Path=StatusList}"
HorizontalAlignment="Left"
HorizontalContentAlignment="Left"
VerticalContentAlignment="Top"
BorderThickness="0"
Background="#000000">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<Button MinWidth="20"
MinHeight="100"
Background="{Binding Converter={StaticResource StatusConverter}}"
Content="{Binding}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
现在的问题是,如果我在绑定后更改应用程序资源的值,列表不会更新。似乎绑定是使用副本而不是引用完成的。模型的数据更新得很好,引发了 PropertyChanged 事件,但列表中的数据永远不会改变。
为了您的理解:我有一个网络客户端,它每 10 秒接收一次新数据,需要在该列表中绘制数据。现在每当我收到数据时,我都会更新应用程序资源,正如我所说,它应该绑定到列表中。当我调试在包含列表的 XAML 文件的 InitializeComponent() 方法前面停止并等待几秒钟的代码时,我得到了传输数据的最新结果,但就是这样,它再也不会更新了。
您能否告诉我定义模型的全局可用实例的更好方法或绑定它的更好方法?如您所见,我在程序的多个部分都需要它。
【问题讨论】:
-
如何更改应用资源的值?
-
在我的客户内部。 DataModel 有一个名为 update(Message) 的方法,我在其中传递收到的消息并相应地更新值。所以客户端知道 DataModel 并且也需要访问它。
-
你的数据模型是什么?收藏?一个列表?上课?
-
如果它是一个 ObservableCollection 并且你正在做 list = new List();这不起作用,您需要执行 .Clear() 然后添加元素。
-
DataModel 是一个类,它包含一个名为 StatusList 的列表和一些其他属性,当然还有更新列表的方法,它是一个普通的 List 列表,List
StatusList。
标签: wpf xaml data-binding