WPF绑定到更改命令

13z8s7eq  于 2023-05-30  发布在  其他
关注(0)|答案(1)|浏览(137)

我有一个按钮,应该绑定到一个视图的命令.问题是这个命令改变了运行时(最初它是空的)。我的代码看起来像这样:
MyViewModel.cs

public class MyViewModel INotifyPropertChanged
{
    ....
    private CommandStorage? _commandStorage;
    public CommandStorage? commandStorage
    {
       get => _commandStorage;
       set
       {
           _commandStorage == value;
           OnPropertyChanged(nameof(CommandStorage));
       }
    }
    public ICommand MyCommand => commandStorage?.MyStoredCommand;
    ......
 }

MyView.xaml:

<Button Command={Binding MyCommand}

这里我面对的是MyCommand在初始化期间被设置为null一次。即使在commandStorage更改后,新值也不会设置为MyCommand。

j8yoct9x

j8yoct9x1#

绑定到引发更改通知的CommandStorage属性,并删除多余的MyCommand属性:

<Button Command="{Binding CommandStorage.MyStoredCommand}" />

不能假定绑定引擎知道在引发CommandStorage属性的PropertyChanged事件时刷新MyCommand属性的值。
另一个选项是在其他属性的setter中实际引发数据绑定属性的事件:

public CommandStorage? commandStorage
{
    get => _commandStorage;
    set
    {
        _commandStorage == value;
        OnPropertyChanged(nameof(CommandStorage));
        OnPropertyChanged(nameof(MyCommand));
    }
}

我猜这只是一个错字,但在你发布的代码中,该属性被称为commandStorage。

相关问题