これに対して(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がViewにアクセスすることを本当に望んでいないことを(ちょっと)理解しています。では、親が子コントロールを「作成」しない場合、どのようにそれを認識しているのでしょうか?