如何在 WPF 中对 属性 数据项引发更改事件

How to raise a changed event in WPF on property of data item

我有一个 MVVM ViewModel,它加载一个 EF 对象作为构造函数的一部分,然后将该对象公开为 属性。然后 UI 可以根据该对象的属性进行更新。到目前为止很简单。

UI 有两个日期元素,用日期选择器处理。当一个发生变化时,我想检查另一个的状态,并可能通过弹出窗口提醒用户。所以我在我的 ViewModel 上创建了一个 "DateCheck" 属性 并将 PopUp 的 IsOpen 属性 绑定到那个:

public bool Check
{
    get 
    {
        if (Job.ExtractDate != null && Job.DeliveryDate == null)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

这在理论上应该可行,但我不知道如何让它触发。

如果我将绑定的 UpdateSourceTrigger 设置为 LostFocus,它永远不会触发,因为绑定在弹出窗口本身上 - 它不可见,所以它当然不会失去焦点。

如果我将 UpdateSource 触发器设置为 PropertyChanged,那么我需要以某种方式引发更改事件。但是正在更改的 属性 不在 ViewModel 本身上 - 它在 ViewModel 公开为 属性.

的源对象上

当然,我在这里遗漏了一些基本的东西,而且我非常愚蠢。如何触发我的 属性 更改?

如果您不想在您的模型中实现 INotifyPropertyChanged classes,那么您可以在您的 ViewModel 上创建两个 Date 属性来引发 PropertyChanged 事件。

您可以简单地将模型中的这两个属性 class 映射到您的构造函数中。

显然,完成后您必须将值复制回模型对象。通常采用 'Save Changes' 风格的 ICommand ;)