繁体   English   中英

在Silverlight RIA中绑定到数据网格的项源时,NotifyPropertyChanged

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM