C# 修改DataContext时的Wpf事件

C# 修改DataContext时的Wpf事件,c#,wpf,events,binding,datacontext,C#,Wpf,Events,Binding,Datacontext,您知道当DataContext发生更改(不是替换,只是修改)时,文本框将如何修改其内容吗?我希望收到通知,就像UI一样,在DataContext上有某种事件。到目前为止,我还没有找到一种方法来实现这一点,我打算放弃,只需订阅DataContext中每个INotifyPropertyChanged上的所有事件。我知道在窗口类中有DataContextChanged/DataContextChanged,但到目前为止,我要么无法让它工作,要么只有在完全替换DataContext时才会触发。有什么方法

您知道当DataContext发生更改(不是替换,只是修改)时,文本框将如何修改其内容吗?我希望收到通知,就像UI一样,在DataContext上有某种事件。到目前为止,我还没有找到一种方法来实现这一点,我打算放弃,只需订阅DataContext中每个
INotifyPropertyChanged
上的所有事件。我知道在
窗口
类中有
DataContextChanged
/
DataContextChanged
,但到目前为止,我要么无法让它工作,要么只有在完全替换DataContext时才会触发。有什么方法可以做到这一点吗?

思考一下被问到的问题。如果数据上下文中的任何属性发生更改,将触发常规事件

可以在外部执行该操作的流程是什么

分散式解决方案

属性不提供更改通知,除非它们自己手动编程以提供更改通知;因此,为什么
INotifyPropertyChange
是正常使用的路径

集中式解决方案

否则,一个单独的管理器将需要对实例进行反思,对所有属性进行快照。然后,在计时器上,管理器将轮询实例以获取当前快照,并将该快照与旧快照进行比较。如果检测到更改,则会触发事件,新快照将替换旧快照



DataContextChanged
事件仅在窗口的DataContext已完全更改(设置为null或新实例等)时触发。我相信您走的是正确的道路,在ViewModel中,您需要订阅
NotifyPropertyChanged
。在事件处理程序中,可以打开相应的属性,如下所示:

private void OnNotifyPropertyChanged(object sender, PropertyChangedEventArgs e)
{
    switch (e.Property)
    {
        case "Property1":
            break;
        case "Property2":
            break;
        case "Property3":
            break;
    }
}

INotifyPropertyChanged正是文本框如何在anks@Domysee上运行的,这是我在问了这个问题后意识到的。窗口不会将自身绑定到整个上下文,而是绑定了INotifyPropertyChanged的值。当然谢谢!