我的 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 您的命令可能已变为(不可)可执行,您可以使用
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();
}
}
}