按钮IsEnabled绑定无法正常工作

Mik*_*Del 2 c# wpf xaml

Button.IsEnabled 不能正常工作.

我调试了代码,属性的setter被"true"值命中.但该按钮仍然被禁用.

View.xaml:

<StackPanel Grid.Row="2" Margin="0,20,0,0" >
        <Button Name="ButtonOk" Content="OK" Margin="0,0,4,0" IsEnabled="{Binding SomethingIsValid}"  Command="{Binding CommandOk}" />
        <Button Name="ButtonCancel" Content="Cancel" Margin="0,0,4,0" IsCancel="True" /
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

View.xaml.cs:

...
public View(ViewModel viewModel)
{
    this.InitializeComponent();

    this.viewModel = viewModel;
    this.DataContext = viewModel;            
}
Run Code Online (Sandbox Code Playgroud)

视图模型:

public bool SomethingIsValid
{
   get
   {
      return somethingIsValid;
   }
   set
   {
      this.somethingIsValid= value;
      this.RaisePropertyChanged(() => this.SomethingIsValid);
   }
}

#region IDataErrorInfo
public string this[string columnName]
{
   get
   {
      this.SomethingIsValid= false;

      if ("SomeName" == columnName)
      {
         if (string.IsNullOrEmpty(this.Status))
         {
            return "Please bla bla..";
         }
      }

      this.SomethingIsValid = true;
      return string.Empty;
   }
}

public string Error
{
   get
   {
      return string.Empty;
   }
}
#endregion

public ICommand CommandOk
{
   get
   {
      if (this.commandOk == null)
      {
         this.commandOk = new RelayCommand(this.CommandOkAktion, () => this.SomethingIsValid );
      }

      return this.commandOk;
   }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ser 6

如果您使用的是命令,则单独绑定按钮的IsEnabled属性并不是一个好主意.相反,您应该在命令的"CanExecute"中提供正确的值.这也将启用按钮.

  • 为什么这是一个更好的主意?在某些情况下,某些其他事件需要禁用此按钮。为此,我们可以使用布尔值。绑定这个布尔值不是更干净吗? (2认同)

Ani*_*aha 6

如果仍有问题,请确保您的IsEnabled属性位于Command属性之后。

<Button Command="{Binding StartCommand}" IsEnabled="{Binding StartEnabled}" />
Run Code Online (Sandbox Code Playgroud)

-作品

  <Button IsEnabled="{Binding StopEnabled}" Command="{Binding StopCommand}"  />
Run Code Online (Sandbox Code Playgroud)

-不起作用

请注意,我的两个命令都可以始终执行。对我来说更容易解决。

  • 这也对我有用,但确实似乎是一个应该修复的错误:-) (4认同)
  • 这对我来说是最简单的答案,应该作为同时使用 Command 属性和 IsEnabled 属性的“陷阱”在某处列出。 (3认同)
  • 2021 年我认为这不再有效 (3认同)