我们如何在使用Icommand点击MVVM中的按钮时禁用像textbox,combobox这样的wpf控件

时间:2018-02-16 08:53:54

标签: wpf button controls icommand

  

这里我在模型中添加了一个布尔属性,并将其绑定到Combobox的Isenabled属性。并将命令绑​​定到我已添加了execute()方法的按钮,该方法将绑定的属性设置为组合框。但是这个改变是按钮的启用。有没有办法在btn点击时禁用组合框?

型号:

    public class MyPanelModel : BindableBase
      {
    private  bool _MessageVisibilty;
    public bool MessageVisibilty
    {
        get
        {
            return _MessageVisibilty;
        }
        set
        {
            SetProperty(ref _MessageVisibilty, value);
        }
    }
}

查看型号:

    private MyPanelModel plModel;
    public MyPanelModel MyPnlModel
    {
        get { return plModel; }
        set { SetProperty(ref plModel,value); }

    }           

    private readonly DelegateCommand _hideCommand;

    public DelegateCommand DisableOtherControlsCommand
    {
        get { return _hideCommand; }
    }

    public MyPanelViewModel()
    {
    _hideCommand = new DelegateCommand(hideExecute, canExecute);
    _hideCommand.RaiseCanExecuteChanged();
    }

    private void hideExecute()
    {
        MyPnlModel.MessageVisibilty = false;
    }

    private bool canExecute()
    {

            return true;

    }

Xaml:

    <ComboBox  Mandatory="True">
 <i:Interaction.Triggers >
   <i:EventTrigger EventName="IsEnabled">
     <prism:InvokeCommandAction Command="{Binding MyPanelModel.MessageVisibilty,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"  />
       </i:EventTrigger>
          </i:Interaction.Triggers>
           </ComboBox>

    <Button Margin="10" Command="{Binding MyPanelViewModel.DisableOtherControlsCommand}" >Save</Button>

1 个答案:

答案 0 :(得分:0)

如果你想使用MVVM,我们的想法是将你的按钮的IsEnable属性绑定到viewmodel中的布尔值。

如果您的viewmodel实现了INotifyPropertyChanged并且被设置为视图的datacontext,那么当您更新viewmodel中的boolean值时,绑定到boolean属性的控件应该是启用/禁用

如果您在单击按钮后更改布尔值,则只需创建一个Command并将按钮Command属性绑定在其上即可。在命令方法实现中,将布尔值设置为true / false,它将立即反映在ui的isenable属性上

对于Command创建,这是另一个可以帮助您的主题: How to bind WPF button to a command in ViewModelBase?