我为此提供了一些解决方案(由 Stack Exchange Guru 提供),但我很好奇如何正确实现这一点,因为我读到一个选项是在子控件中创建一个事件并在父控件中订阅/收听它.
我有一个子控件,其中 onPropertyChanged 成功触发:
public class KeypadEventArgs : EventArgs
{
public KeypadEventArgs(double result)
{
Result = result;
}
public double Result { get; set; }
}
protected void OnPropertyChanged(string name)
{
switch (name)
{
case "Result":
KeyUpdated(this, new KeypadEventArgs(Result));
break;
}
}
它被添加到 XAML 中的主机控件中,如下所示:
<UserControl:KeypadView Width="200" Height="300" Visibility="Collapsed" />
现在我希望主机/父控件订阅子控件的 KeyUpdated 事件:
就像是:
this.keypadViewModel.KeyUpdated += this.OnKeyUpdated;
...
private void OnKeyUpdated(object sender, KeypadViewModel.KeypadEventArgs e)
{
value = e.Result;
}
我了解(排序)MVVM 模式并不真正希望 ViewModel 访问视图。因此,如果父级从不“创建”子级控件,它是如何意识到的呢?