【问题标题】:NotifyPropertyChanged when binding to itemsource of datagrid in Silverlight RIA在 Silverlight RIA 中绑定到数据网格的项目源时发生 INotifyPropertyChanged
【发布时间】:2011-02-17 14:19:56
【问题描述】:

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

我已将文本框的 isEnabled 值绑定到数据网格 ItemsSource.SourceCollection,这给了我一个 IEnumerable。我制作了一个转换器,可以将此数据模型转换为布尔值。

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

我猜这与我的数据模型上的通知属性更改有关,但我不知道。

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

【问题讨论】:

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


    【解决方案1】:

    我问了类似的问题,正如 Luc 回答的那样,您需要有 INotifyPropertyChanged 事件实现,否则不会发生项目更改。 How to make a cell in a datagrid readonly based the content on another cell in SL4?

    【讨论】:

    • 这是一个RIA数据模型,它继承自实现INotifyPropertyChanged的“Entity”
    • 能否请您在转换器中设置一个断点并调试代码,看看您更改集合时是否调用了转换器?
    【解决方案2】:

    是的,当您绑定到对象的子属性时,您需要该特定属性的 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"});
    
        }
    

    【讨论】:

    • 更改与 ItemsSouce 的绑定不会改变任何内容。
    • 我为您编辑了它以使自己更清楚。 + 不要忘记使用 observableCollection..
    • 我正在使用 PagedCollectionViews。会不会跟这个有关系?
    • 我使用带有 PagedCollectionView 的 Luc 解决方案创建了一个示例,它工作正常。看看csharprambling.wordpress.com
    猜你喜欢
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 2014-04-14
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多