[英]NotifyPropertyChanged when binding to itemsource of datagrid in Silverlight RIA
我在Silverlight项目中有一个文本框和一个数据网格。 如果datagrid中的项目计数为0或datagrids itemssource中的字段总和= 0,则应启用文本框。
我已经将文本框的isEnabled值绑定到datagrids ItemsSource.SourceCollection,这给了我IEnumerable。 我做了一个转换器,将这个数据模型转换为bool。
当我打开silverlight页面并绑定datagrid时,转换器将运行,并且一切都按预期工作,但是如果我更改sumgrid字段或在datagrid中添加/删除行,则不会发生任何事情。
我猜想这与我的数据模型上的通知属性更改有关,但是我不知道。
关于如何解决这个问题有什么想法吗?
是的,当您绑定到对象的子属性时,您需要该特定属性的PropertyChanged事件,以便目标更新其值。
在您的示例中,ItemsSource需要引发属性SourceCollection的PropertyChanged事件。
您可以做的是绑定到ItemsSource,这将被触发,然后在您的转换器中使用Sourcecollection值。
例如:
<sdk:DataGrid Name="dg" ItemsSource="{Binding}" AutoGenerateColumns="True" VerticalAlignment="Top"/>
<TextBox Text="{Binding ElementName=dg, Path=ItemsSource.Count}" VerticalAlignment="Bottom" HorizontalAlignment="Right"/>
码:
_items = new ObservableCollection<SomeClass>();
_items.Add(new SomeClass() { Name = "a" });
_items.Add(new SomeClass() { Name = "b" });
_items.Add(new SomeClass() { Name = "c" });
DataContext = _items;
private void testButton_Click(object sender, RoutedEventArgs e)
{
_items.Add(new SomeClass(){Name = "ha"});
}
我问了类似的问题,正如Luc回答的那样,您需要INotifyPropertyChanged事件实现,否则将不会发生项目更改。 如何基于SL4中另一个单元格上的内容使datagrid中的单元格变为只读?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.