从另一个UserControl使用MVVM启用/禁用Button

时间:2013-09-21 06:50:51

标签: c# wpf xaml mvvm

我有UserControl名为“Footer.xaml”和“Header.xaml”两个用户控件都放在不同的窗口。

Footer.xaml有两个按钮: -   btnBasic   btnStandard

Header.xaml有一个按钮: -    大厅

当我点击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;
    }

但是按钮效果不好。

1 个答案:

答案 0 :(得分:2)

您为MVVM标记了您的问题,但发布的代码完全违反了MVVM的规则。您可以通过以下方式严格遵守MVVM规则来实现这一目标 -

  1. 创建一个ViewModel课程,该课程将作为DataContext用于您的两个观看次数。

  2. 在其中创建bool property并使用此属性绑定IsEnabled DP,即btnBasicbtnStandard

  3. 在ViewModel类中创建一个ICommand,该类将在lobby按钮单击时调用,并根据您的具体情况将此bool属性设置为true或false。

  4. 但正如您在上面的评论中发布的那样,您已经为两个视图分别创建了ViewModel,您可以使用Event Aggregator在两个ViewModel之间进行通信。