2011-02-17 65 views
0

我在silverlight项目中有一个文本框和一个数据网格。如果DataGrid中的项目数为0或字段的DataGrid中总和的ItemsSource = 0当绑定到Silverlight RIA中的datagrid的itemsource时NotifyPropertyChanged

我绑定的文本框的值的IsEnabled在DataGrid中ItemsSource.SourceCollection这使我的文本框应该启用一个IEnumerable。我制作了一个转换器,将此数据模型转换为布尔值。

当我打开我的silverlight页面并绑定数据网格时,转换器运行并且我按预期工作,但是如果我更改数据网格中的总和字段或添加/删除行,则不会发生任何反应。

我猜它与通知我的datamodel属性更改有关,但我不知道。

有关如何解决这个问题的想法?

回答

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"}); 

    } 
+0

将绑定更改为ItemsSouce不会改变任何内容。 – olve 2011-02-18 09:46:38

+0

我编辑它让你更清晰。 +不要忘记使用observableCollection ..我使用PagedCollectionViews。 – 2011-02-18 10:41:06