【问题标题】:Enable Submit/Cancel button through WPF Command pattern通过 WPF 命令模式启用提交/取消按钮
【发布时间】:2012-04-17 19:52:28
【问题描述】:

我的视图包含以下 2 个按钮:

<StackPanel Grid.Row="0" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
        <Button Content="Start" Width="100" Height="30" Margin="20" Command="{Binding OkCommand}"/>
        <Button Content="Cancel" Width="100" Height="30" Margin="20" Command="{Binding CancelCommand}"/>
 </StackPanel>

在我的虚拟机中 - 我有命令拦截设置。

class StockViewModel
{
    #region Properties
    public ICommand OkCommand { get; set; }
    public ICommand CancelCommand { get; set; }
    #endregion

#region Constructor
    public StockViewModel()
    {
        OkCommand = new myCommand(myOkExecute, myCanOkExecute);
        CancelCommand = new myCommand(myCancelExecute, myCanCancelExecute);
    }
    #endregion

    private void myOkExecute (object parameter)
    {
       ......
    }

    private bool myCanOkExecute(object parameter)
    {
       ........
    }

    private bool myCanCancelExecute(object parameter)
    {
      .......
    }

    private myCanCancelExecute(object parameter)
    {
     ............
    }
    #endregion


   public class myCommand : ICommand
   {

   }

问题:我希望按钮的行为是 opp - 意思是当一个按钮被点击(提交)时,另一个按钮应该被禁用,反之亦然。首次加载表单时 - 默认启用提交 btn。

我尝试了多种方法 - 但似乎无法正常工作。

我在这里编写纯 MVVM 代码 - 没有棱镜/事件聚合器概念。

人们能否推荐(通过代码示例)通常如何处理这种命令行为。

【问题讨论】:

  • 为什么你的命令不能引发 ICommand.CanExecuteChanged 事件?
  • 查看更新的代码 - 它包含所有事件 - 只是似乎无法弄清楚如何访问那里的 btnState 并将它们设置为 true 或 false

标签: c# wpf mvvm


【解决方案1】:
    private bool IsOkToExecute
    {
        get { return _isOkToExecute; }
        set
        {
            _isOkToExecute = value;
            RaisePropertyChanged("IsOkToExecute");
        }
    }

     private void myOkExecute (object parameter)
     {
        IsOkToExecute = false;
     }

    private void myCancelExecute(object parameter)
     {
         IsOkToExecute = true;
     }

private bool myCanOkExecute(object parameter)
{
    return IsOkToExecute;
}

private bool myCanCancelExecute(object parameter)
{
    return !IsOkToExecute;
}

【讨论】:

  • 谢谢丹尼斯 - 这就像一个魅力!我一直在练习将按钮行为绑定到文本框(无论是否输入了值),因此这对我来说最终是一个艰难的选择。虽然一旦实施此解决方案 - 非常有意义。再次感谢
猜你喜欢
  • 2018-01-04
  • 2023-04-05
  • 2010-12-26
  • 1970-01-01
  • 2014-11-05
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多