UserControl があり、bool プロパティ A が含まれています。その UserControl を含むメイン ウィンドウでは、A の値に応じてボタンを有効/無効にする必要があります。A を公開し、次のようなボタンをバインドしようとしました。
<Button IsEnabled="{Binding MyUserControl.A}"/>
そして、UserControl で、Property A に PropertyChangedEventHandler を次のように設定します。
private bool _a;
public bool A
{
get
{
return _a;
}
set
{
if (_a == value)
return
_a = value;
OnPropertyChanged("A");
}
}
きれいに見えます。しかし、なぜそれが機能しないのかわかりません。メインウィンドウとそのユーザーコントロールの間で通信するための実装が不足しているようです(OnPropertyChangedを使用すると、ユーザーコントロール内のすべてのバインディングがうまく機能するため)。
私はそれに対するいくつかの解決策を持っています.1.メッセンジャーを使用して、コンテンツがAの値であるユーザーコントロールからメッセージを送信すると、メインコントロールが値をキャッチしてボタンのIsEnabledに設定します。2. イベントを作成し、A の値が変更されるたびにそれを上げます。
この問題とその修正方法について何か考えはありますか? 以下の 2 つの解決策はうまくいくと思いますか、それとも他に推奨事項はありますか?
読んでくれてありがとう。
<< 編集 >> この問題は解決されました。コードビハインドでユーザーコントロールのデータコンテキストを設定し、データテンプレートで既に設定していることを認識していないのは私の間違いです。--> ということで、usercontrol の viewmodel の初期化を 2 回重複させています。--> どういうわけか、NotifyPropertyChange が正しく動作しません。
申し訳ありませんが、この質問のタイトルはこのばかげた間違いには適していません。タイトルの問題を解決するために正しい道を進んだようです。読んでいただき、アドバイスをいただきありがとうございます。