我在silverlight项目中有一个文本框和一个数据网格。如果datagrid中的项目计数为0或datagrids itemssource中的字段总数= 0,则应启用文本框。
我已将文本框的isEnabled值绑定到datagrids ItemsSource.SourceCollection,它给了我一个IEnumerable。我已经制作了一个将这个数据模型转换为bool的转换器。
当我打开我的silverlight页面并绑定数据网格时,转换器运行并且我按预期工作的所有内容,但如果我更改sum字段或添加/删除datagrid中的行,则没有任何反应。
我猜它与我的datamodel上的通知属性更改有关,但我不知道。
有关如何解决此问题的任何想法?
答案 0 :(得分:0)
是的,当您绑定到对象的子属性时,您需要该特定属性的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"});
}
答案 1 :(得分:0)
我问了类似的问题,并且Luc回答你需要有INotifyPropertyChanged事件实现,如果没有项目更改将不会发生。 How to make a cell in a datagrid readonly based the content on another cell in SL4?