Ray*_*nan 7 c# mvvm windows-community-toolkit
我有一个绑定到 viewmodel.SelectedDate 的 DatePicker 控件。我没有使用 propfull,而是使用 CTK [ObservableProperty]。当我选择一个新日期时,我想调用另一个函数,该函数根据该新日期获取新的数据集。还有其他注释吗?
/// Set by the Date Control on the form
[ObservableProperty]
//[AlsoCallThisFunction(DisplayBookings)]
public DateTime bookingDate;
///I want to call this for a fresh dataset
///after the bookingDate is set
void DisplayBookings()
{
GoToDatabaseAndGetNewRecordset(bookingDate);
}
Run Code Online (Sandbox Code Playgroud)
旧的做法:
//private DateTime bookingDate;
//public DateTime BookingDate
//{
// get { return bookingDate; }
// set {
// bookingDate = value;
// DisplayBookings();
// }
//}
Run Code Online (Sandbox Code Playgroud)
您可以覆盖OnPropertyChanging和OnPropertyChanged事件,并在那里调用您的方法。
请记住,如果您设置了绑定,则UpdateSourceTrigger=PropertyChanged某些更改可能仍在进行。
protected override void OnPropertyChanged(PropertyChangedEventArgs e)
{
base.OnPropertyChanged(e);
if (e.PropertyName == nameof(BookingDate))
{
DisplayBookings();
}
}
Run Code Online (Sandbox Code Playgroud)
更新
从v8.0.0 Preview 3开始,您可以使用部分属性更改方法。
引用自博客:
当使用 [ObservableProperty] 生成可观察属性时,MVVM Toolkit 现在还将生成两个没有实现的部分方法:On<PROPERTY_NAME>Changing 和 On<PROPERTY_NAME>Changed。这些方法可用于在属性更改时注入额外的逻辑,而无需回退到使用手动属性。请注意,由于这两个方法是部分方法、返回 void 且没有定义,因此如果未实现它们,C# 编译器将完全删除它们,这意味着在不使用时它们将消失并且不会给应用程序增加任何开销
然后你可以将其重写为:
[ObservableProperty]
public DateTime bookingDate;
partial void OnBookingDateChanged(DateTime bookingDate)
{
DisplayBookings();
}
Run Code Online (Sandbox Code Playgroud)