代码之家  ›  专栏  ›  技术社区  ›  vidalsasoon

relaycommands覆盖我按钮的“isenabled”

  •  2
  • vidalsasoon  · 技术社区  · 16 年前

    relaycommands覆盖了我按钮的“isenabled”。

    这是虫子吗?这是我的视图中的xaml和viewmodel中的代码

    <Button Grid.Column="0" Content="Clear" IsEnabled="False" cmd:ButtonBaseExtensions.Command="{Binding ClearCommand}"  />    
    
    public RelayCommand ClearCommand
        {
           get { return new RelayCommand(() => MessageBox.Show("Clear Command")); }
        }
    

    注意,我在xaml中硬编码了isenabled=“false”。此值将被完全忽略(按钮始终处于启用状态)。

    我知道relaycommand有一个canexecute重载,但我确实想使用这个,因为我想做的不仅仅是一个禁用的按钮。

    2 回复  |  直到 15 年前
        1
  •  3
  •   LBugnion    16 年前

    这是一个有趣的观点。你说得对,isenabled属性被重写。我想一个改进可以是忽略isenabled属性,如果CanExecute委托没有在构造函数中设置…我会在下一个版本中考虑。

    同时,使用canExecute委托并将其设置为始终返回false。

    public RelayCommand ClearCommand
    {
       get { return new RelayCommand(
           () => MessageBox.Show("Clear Command"),
           () => false); }
    }
    

    干杯, 劳伦特

        2
  •  1
  •   Khalid Lasne    15 年前

    这是我的实现…

    1)relaycommand类声明可以是:

    公共类relaycommand:viewmodelbase、icommand

    2)ISenabled属性的实现可以如下:

        public bool IsEnabled
        {
            get { return _isEnabled; }
            set
            {
                if (value != _isEnabled)
                {
                    _isEnabled = value;
    
                    OnPropertyChanged("IsEnabled");
                }
            }
        }
    

    3)最后需要在xaml中绑定isenabled属性,如下所示:

    isenabled=“{binding path=searchcommand.isenabled}”