一种选择是利用NotifyPropertyChanged
. 由于您使用的是 ViewModel,它们很可能实现INotifyPropertyChanged
了 ,您可以像框架一样使用它。
当您的 CreateServiceViewModel 创建 MemberSearchViewModel 时,它只会订阅 PropertyChanged 事件:
//This goes wherever you create your child view model
var memberSearchViewModel = new MemberSearchViewModel(); //Or using a service locator, if applicable
memberSearchViewModel.PropertyChanged += OnMemberSearchPropertyChanged;
private void OnMemberSearchPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if(e.PropertyName == "SelectedMember")
{
//Code to respond to a change in the Member
}
}
然后在您的 MemberSearchViewModel 中,当用户从网格中选择一个成员时,您只需引发 NotifyPropertyChanged 事件。
编辑:正如@DNH 在评论中正确指出的那样,如果没有正确清理,使用这样的事件处理程序可能会导致内存泄漏。因此,当您完成 MemberSearchViewModel 后,请确保取消订阅该PropertyChanged
事件。因此,例如,如果您只需要它直到用户选择一个成员,您可以将它放在 Property Changed Handler 本身中(我已将其切换为使用类级变量来保存 ViewModel):
private void OnMemberSearchPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if(e.PropertyName == "SelectedMember")
{
//Code to respond to a change in the Member
//Unsubscribe so the view model can be garbage collected
_memberSearchViewModel.PropertyChanged -= OnMemberSearchPropertyChanged;
_memberSearchViewModel = null;
}
}