wpf - MVVM/ObservableCollection 问题

标签 wpf silverlight mvvm

我有以下 XAML:

   <Grid x:Name="LayoutRoot">
        <sdk:DataGrid AutoGenerateColumns="True" Margin="46,38,0,40" x:Name="FamilyListGrid" HorizontalAlignment="Left" Width="475" 
               ItemsSource="{Binding FamilyList}"
               SelectedItem="{Binding SelectedFamily, Mode=TwoWay}" />
    </Grid>

我在 Binding 中使用的 FamilyList 属性是我的 View 模型类中实体的 ObservableCollection。我发现我需要在我的 FamilyList 集合的 setter 中实现 INotifyPropertyChanged,否则绑定(bind)不起作用。我的理解是 ObservableCollection 已经实现了这一点。如果是这种情况,为什么我需要实现 notify 属性?

如果有帮助,这是我的 FamilyList 属性定义:
    private ObservableCollection<Services.Family> familyList;
    public ObservableCollection<Services.Family> FamilyList
    {
        get { return familyList; }
        private set 
        { 
            familyList = value;
            NotifyPropertyChanged("FamilyList");
        }
    }

最佳答案

ObservableCollection<T>实现 INotifyCollectionChanged它通知已注册的事件处理程序有关集合中的更改(添加、删除、排序项目)。然而 DataGrid必须知道您的业务对象之一的属性是否已更改以更新网格中的值。为此,INotifyPropertyChanged是需要的。ObservableCollection<T>还实现 INotifyCollectionChanged .但是,这只能用于在集合的属性已更改时得到通知。没有任何机制可以让集合检测您的业务对象是否已更改(如果有,它将注册到您的业务对象的 INotifyCollectionChanged :)。

关于wpf - MVVM/ObservableCollection 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5123537/

相关文章:

c# - 读取XML后,更改颜色不会影响属性更改

android - 为什么 MVC 中的单元测试比 MVP 和 MVVM 更难

wpf - 3D3 设备和 RDP 窗口最小化的远程桌面行为

c# - WPF .NET4.0 是否有等效的 DependencyObject Collection<T>?

c# - Silverlight 4 可以与本地主机建立 TCP 连接吗?

silverlight - 使用 Rx 简化异步 Silverlight Web 服务请求

c# - 如何在 silverlight 客户端对象模型中设置 SharePoint "Author"?

c# - 在Grid中使用Expander,扩展区域使用所有空间

没有目标类型的WPF样式?

mvvm - 从用户交互和服务事件更新 View 模型的好模式是什么?