1

「Footer.xaml」と「Header.xaml」という名前の UserControl があります。両方のユーザー コントロールが別のウィンドウに配置されています。

Footer.xaml には 2 つのボタンがあります:- btnBasic btnStandard

Header.xaml には 1 つのボタンがあります:- ロビー

Header.xaml の Lobby ボタンをクリックすると、私の状態で [ btnBasic と btnStandard ] の両方のボタンの IsEnabled プロパティを変更したいと考えています。

以下のことを試してください [ Footer.xaml.cs ] デフォルトでは両方のボタン IsEnabled = true

public partial class Footer : UserControl
    {

        static Footer objFooter = new Footer();
        public Footer()
        {
            InitializeComponent();
            objFooter = this;

        }


        public static Footer GetFooterInstance()
        {
            return objFooter;
        }
}

および Header.xaml.cs で

private void btnLobby_Click(object sender, RoutedEventArgs e)
        {
                Footer objFooter;
                objFooter = Footer.GetFooterInstance();
                objFooter.btnBasic.IsEnabled = false;
                objFooter.btnStandard.IsEnabled = false;
    }

しかし、何もボタンによる効果はありません。

4

1 に答える 1

2

質問にタグを付けましMVVMたが、投稿されたコードはMVVMのルールに完全に違反しています。これは、次の方法で MVVM のルールに厳密に従うことで実現できます。

  1. 両方のビューViewModelとして機能するクラスを作成します。DataContext

  2. その中に を作成し、ボタンの DP をbool propertyバインドIsEnabledします。つまりbtnBasicbtnStandardこのプロパティを使用します。

  3. ICommandボタンのクリックで呼び出される ViewModel クラスに を作成lobbyし、状況に応じてこの bool プロパティを true または false に設定します。

ただし、上記のコメントに投稿したように、両方のビューに別のビューモデルが既にあるため、イベント アグリゲーターを使用して 2 つのビューモデル間で通信できます。

于 2013-09-21T07:00:56.913 に答える