简体   繁体   English

依赖属性命令的 CanExecute() 未更新

[英]Dependency Property command's CanExecute() not updating

I have a user control and within I defined the following property:我有一个用户控件,并在其中定义了以下属性:

public string MyProperty
{
      get { return (string)GetValue(MyPropertyProperty); }
      set { SetValue(MyPropertyProperty, value); }
}
        
public static readonly DependencyProperty MyPropertyProperty =
      DependencyProperty.Register("MyProperty", typeof(string),
           typeof(MyUserControlView), new PropertyMetadata(null, MyPropertyChangedCallback));

private static void MyPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
     var control = (MyUserControl) d;
     control.MyProperty = (string)e.NewValue;
}

and the following command:和以下命令:

public ICommand MyCommand
{
     get { return (ICommand)GetValue(MyCommandProperty); }
     set { SetValue(MyCommandProperty, value); }
}

public static readonly DependencyProperty MyCommandProperty =
     DependencyProperty.Register("MyCommand", typeof(ICommand), typeof(MyUserControlView),
         new PropertyMetadata(null, MyCommandPropertyChangedCallback));

private static void MyCommandPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
     var control = (MyUserControlView)d;
     control.MyCommand = (DelegateCommand)e.NewValue;
}

void ExecuteMyCommand() {...}

bool CanExecuteMyCommand(){
    return !string.IsNullOrWhiteSpace(MyProperty);
}

I Initialize this command with我初始化这个命令

SetValue(MyCommandProperty, new DelegateCommand(ExecuteMyCommand, CanExecuteMyCommand));

The problem is that the CanExecuteMyCommand() method does not work, because it does not use the current value of MyProperty .问题是CanExecuteMyCommand()方法不起作用,因为它不使用MyProperty的当前值。 Why is this and how can I use my command correctly in a user control?为什么会这样?如何在用户控件中正确使用我的命令?

You have to invoke CanExecuteChanged after changing MyProperty it will call CanExecute .您必须在更改MyProperty后调用CanExecuteChanged ,它将调用CanExecute

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM