Observable Collection 当 MVVM 中的属性发生更改时发出通知

2024-01-04

我正在尝试将可观察集合绑定到 DataGrid,我想在数据网格中编辑任何行时发出通知。 我的代码可以很好地在添加或删除记录时发出通知,但在编辑记录时不会发出通知。 请告诉我这是否是在 MVVM 中使用可观察集合进行绑定的正确方法以及我是否遗漏了某些内容。提前致谢。

public class studentViewModel : INotifyPropertyChanged
{
    #region constructor

    public studentViewModel()
    {
        _student = new studentModel();
        myCollection = new ObservableCollection<studentModel>();
        myCollection.Add(_student);
        myCollection.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(myCollection_CollectionChanged);

    }

    void myCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        //throw new NotImplementedException();
        System.Windows.MessageBox.Show(e.Action.ToString());
    }

    #endregion

    #region properties

    studentModel _student;
    ObservableCollection<studentModel> _myCollection;

    public ObservableCollection<studentModel> myCollection
    {
        get { return _myCollection; }
        set
        {
            if (_myCollection != value)
            {
                _myCollection = value;
                raisePropertyChange("myCollection");
            }
        }
    }

    public int rollNo
    {
        get { return _student.rollNo; }
        set
        {
            if (value != _student.rollNo)
            {
                _student.rollNo = value;
                raisePropertyChange("rollNo");
            }
        }
    }

    public string firstName
    {
        get { return _student.firstName; }
        set
        {
            if (value != _student.firstName)
            {
                _student.firstName = value;
                raisePropertyChange("firstName");
            }
        }
    }

    public string lastName
    {
        get { return _student.lastName; }
        set
        {
            if (value != _student.lastName)
            {
                _student.lastName = value;
                raisePropertyChange("lastName");
            }
        }
    }

    #endregion

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;


    public void raisePropertyChange(string propertyName)
    {
        if (PropertyChanged != null)
        {
           PropertyChanged(this,new PropertyChangedEventArgs(propertyName));
        }
    }

    #endregion
}

public class studentModel
{
    public int rollNo { get; set; }
    public string firstName { get; set; }
    public string lastName { get; set; }
}

xaml 是

<Window.Resources>
    <local:studentViewModel x:Key="StudentsDetails" />
</Window.Resources>
<Grid DataContext="{StaticResource StudentsDetails}">
    <DataGrid ItemsSource="{Binding Path=myCollection, Source={StaticResource StudentsDetails}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
              Name="studentsGrid" CanUserAddRows="True" AutoGenerateColumns="True">

    </DataGrid>
</Grid>

当添加或删除记录时,ObservableCollection 将通知 UI,但是not当编辑记录时。由已更改的对象来通知它已更改。

在您的情况下,当修改一行时,更改的对象的类型是studentModel.
因此,如果您希望 UI 在该对象发生更改时收到通知,您需要实施 INotifyPropertyChanged http://msdn.microsoft.com/en-us/library/ms229614.aspx on studentModel too..

e.g.

 public class studentModel : INotifyPropertyChanged
   .....
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Observable Collection 当 MVVM 中的属性发生更改时发出通知 的相关文章

  • WPF MVVM 可观察集合不更新 GUI

    我正在设计一个 MVVM WPF 应用程序 并且有一个 ViewModel 它有一个名为 SelectedCustomer 的属性 类型为 Customer 该对象有一个名为 SummaryDetails 的 ObservableColle
  • 当 ObservableCollection 中的项目更新时更新 ItemsControl

    问题 你声明一个ItemsControl 或派生自的控件ItemsControl 在里面 看法 您绑定ItemsControl ItemsSource财产给ObservableCollection在你的视图模型中 当项目添加到 删除时 您的
  • 使用 MVVM 动态添加时给予 TabItem 焦点

    所有 我添加一个TabItem to a TabControl动态地使用 MVVM 新的TabItems加载良好 但我希望添加的选项卡自动获得焦点 也就是说 我添加了一个选项卡 但我不想必须单击该选项卡才能获得焦点 XAML 的TabCon
  • MVVM 的 ReSharper 警告

    当我使用 WPF 实现 MVVM 模式时 我发现 ReSharper 经常警告我某些属性从未在我的 ViewModel 中使用 问题是它们正在被使用 但仅由数据绑定系统使用 有其他人遇到过这种烦恼吗 有没有办法帮助 ReSharper 意识
  • 如何将 ICommand 添加到 FrameworkElement 中的事件?

    我怎样才能添加一个ICommand到一个事件从FrameworkElement 具体来说我想做以下事情
  • 从 IValueConverter 获取对 ViewModel 的引用

    是否有一种干净的和 或可接受的标准方式从 IValueConverter 引用 ViewModel 或者这是否打破了 MVVM 模式 基本上 我想根据 ViewModel 的其他属性转换 UI 中的绑定数据 我想这与如何从 IValueCo
  • 如何在 MVVM 视图模型中指定资源?

    假设我想显示对象列表 其中每个对象应该有一个名称和一个合适的图像 例如带有图标的菜单项 或带有文本和图像的按钮 所有示例和程序都将视图模型中的图像公开为 PNG 文件的路径 然后绑定Source of an Image对此 但是如果我想使用
  • wpf 多重绑定到视图模型?

    如何向 xaml 中的多个视图模型对象添加多重绑定 我需要绑定IsEnabled上下文菜单的属性为我的视图模型中的两个整数 以下绑定不起作用 因为它是为 GUI 组件设计的 我该如何做才能与我的ints一起工作
  • 奇怪的问题,除非单击鼠标,否则按钮不会重新启用

    我的应用程序是使用 WPF 中的 MVVM 模式编写的 我的所有按钮都使用命令绑定来执行模型中的代码 所有命令在 CanExecute 中都有代码来确定绑定按钮的启用状态 该逻辑工作完美 但在所有情况下 GUI 都会保持禁用状态 除非我单击
  • 当用户控件可见时将焦点设置到它

    I am showing a MessageBox and want the user to be able to copy the contents of the message using CTRL C The problem is t
  • 第一次调用后 LiveData 未观察到

    我实现了 LiveData 和 ViewModel 来模仿 AsyncTaskLoader 我从 DCIM 中的相机目录加载文件名 然后附加一个 fileObserver 来观察删除文件 图片 时的情况 然后回调告诉 LiveData 在发
  • 绑定到 ListView 项目从视图模型中点击的属性

    我正在尝试使用 itemtapped 属性将事件绑定到菜单页面上的 ListView 目前我在我的应用程序中使用 MVVM Xamarin 表单实验室 框架 我想要完成的是当用户点击菜单项时应用程序导航到正确的视图 这是xaml代码
  • MVVM 路由和中继命令

    两者有什么区别路由命令 http msdn microsoft com en us library system windows input routedcommand aspx and 中继命令 http msdn microsoft c
  • 如何在不违反 MVVM 的情况下绑定到不可绑定的属性?

    我在用SharpVector 的 SvgViewBox https sharpvectors codeplex com 显示静态资源图像 如下所示
  • 如何在Dialog中使用数据绑定?

    我在对话框中实现数据绑定时遇到问题 是否可以 下面是我的 xml
  • 谁应该在 MvvmCross 中创建视图模型实例

    澄清一下 我知道 MvvmCross 在创建视图模型的位置和方式方面非常灵活 我的问题更多的是关于适当的关注点分离 以简化复杂的跨平台应用程序的设计 假设我们有一个包含客户列表和客户详细信息的应用程序 在 iPad 和 Surface 上
  • MVVM 中动态创建 MenuItem-Separator 的 WPF 光学样式

    我有一个MenuItem从动态创建其子菜单项ItemsSource 财产 对于分组 我在菜单中有分隔符 分隔符是由 ItemsSource 集合中的 ControlTemplate 为每个空条目创建的MenuItem ItemContain
  • 如何从 silverlight 中的视图模型从一个视图导航到另一个视图?

    我有一个 ViewModel 和两个 View 如何从 ViewModel 导航到 View2 我在某处读到我们需要使用 PRISM 在 Silverlight 中从 ViewModel 打开多个视图 PRISM 有什么替代方案吗 理想情况
  • MVVM ViewModel 与 MVC ViewModel

    ViewModel 是一个在 MVVM Model View ViewModel 和 ASP NET MVC 的推荐实现中使用的术语 鉴于每种模式都使用相同的术语 研究 ViewModel 可能会令人困惑 MVC ViewModel 和 M
  • 中继命令和无参数执行方法

    我目前正在学习 WPF 和 MVVM 我想我已经了解了大部分内容及其工作原理 但我在使用 RelayCommand 或 DelegateCommand 时遇到了一些我不明白的问题 我认为这与代表的工作方式有关 请注意 下面的代码目前仅处于测

随机推荐