在Silverlight RIA中绑定到datagrid的itemsource时NotifyPropertyChanged

时间:2011-02-17 14:19:57

标签: c# silverlight data-binding silverlight-4.0 ria

我在silverlight项目中有一个文本框和一个数据网格。如果datagrid中的项目计数为0或datagrids itemssource中的字段总数= 0,则应启用文本框。

我已将文本框的isEnabled值绑定到datagrids ItemsSource.SourceCollection,它给了我一个IEnumerable。我已经制作了一个将这个数据模型转换为bool的转换器。

当我打开我的silverlight页面并绑定数据网格时,转换器运行并且我按预期工作的所有内容,但如果我更改sum字段或添加/删除datagrid中的行,则没有任何反应。

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

有关如何解决此问题的任何想法?

2 个答案:

答案 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?