如何在 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 ;)
我有一个 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 ;)