c# - 检测数据上下文的属性更改

标签 c# wpf datacontext inotifypropertychanged

Clemen 在这里的精彩回答还有一个问题:DataContext values in view code behind .如果使用这种方法,此时是否可以检测到 VM 上的属性更改?这些是通过 INotifyPropertyChanged 正确实现的。

var viewModel = DataContext as MyViewModel;
//How would one detect a property change on viewModel?
//Tried viewModel.PropertyChange which doesn't fire.

最佳答案

我认为您一定做错了您在帖子中没有提及的事情。以下代码按预期工作,并将 MyTestPropertyName 打印到控制台窗口。

public partial class MainWindow : Window
{

    public MainWindow()
    {
        DataContext = new MyViewModel();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        MyViewModel viewModel = DataContext as MyViewModel;
        viewModel.PropertyChanged += MyPropertyChangedEventHandler;
        viewModel.NotifyPropertyChanged();
    }

    private void MyPropertyChangedEventHandler(object sender, PropertyChangedEventArgs e)
    {
        Console.WriteLine(e.PropertyName);
    }

}

public class MyViewModel : INotifyPropertyChanged
{
    public void NotifyPropertyChanged()
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs("MyTestPropertyName"));
        }
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    #endregion
}

应该注意的是,这是一个糟糕的设计,仅作为概念证明而设计,您确实可以在代码隐藏中订阅 ViewModel 上的事件。

关于c# - 检测数据上下文的属性更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13785282/

相关文章:

c# - WPF:当应用程序处于非事件状态时创建屏幕保护程序功能?

c# - 选择一个项目两次或更多次

vb.net - 如何在数据模板中设置组合框的 selectedvalue 和 itemssource

c# - 在 Entity Framework 中存储自定义对象列表

c# - 在单元测试中验证方法是否被调用

c# - 如何从页面中的 App.xaml 获取颜色值

wpf - 如何进行密码框验证?

带有 DataTemplate 的 WPF WrapPanel/StackPanel?

c# - Linq to Sql - 更新正确的数据上下文

C#如何在Direct2D绘图中提高效率