WPF:在后面的代码中创建到嵌套属性的绑定

问题描述 投票:0回答:1

我的 xaml 文件中有以下多重绑定:

<MyControl:CommandParameter>
    <MultiBinding Converter="{commonConverters:MultiBindingConverter}">
         <Binding Path="CurrentItem.Id" />
         <Binding Path="SelectedItem.Count" />
     </MultiBinding>
</Mycontrol:CommandParameter>

如何在我的视图模型中定义这个多重绑定? 或者,当这不可能时,如何在我的视图模型中定义每次 Id 或 Count 更改时触发命令的 CanExecute?

另一个困难是CurrentItem和SelectedItem在初始化后可以为null,并且在使用应用程序时会被初始化。

谢谢!

wpf xaml binding viewmodel
1个回答
0
投票

要告诉 WPF 您的命令可能已变为(不可)可执行,您可以使用

ICommand.RaiseCanExecuteChanged
事件。它将使 WPF 调用您命令的
CanExecute
方法。

由于您没有提供 ViewModel 和 SelectedItem/CurrentItem 的代码,以下示例可能不代表您的用例,但它会给您总体思路。

考虑使用以下自定义命令类:

public class MyCommand : ICommand
{
    public EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        // do some stuff
    }

    public bool CanExecute(object parameter)
    {
        // determine if command can be executed
    }

    public void RaiseCanExecuteChanged()
    {
        this.CanExecuteChanged?.Invoke(this, EventArgs.Empty);
    }
}

在你的 ViewModel 中你可以得到类似这样的东西

public class MyViewModel
{
    private int _id;

    public MyCommand SomeCommand { get; set; }

    public int Id 
    { 
        get => _id;
        set
        {
            // do other stuff (ie: property changed notification)
            SomeCommand.RaiseCanExecuteChanged();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.