有三种方法可以解决这个问题:
1. 使用 Converter 将按钮的 IsEnabled 属性绑定到 Status 属性,以从 DeviceStatus 映射到 bool(启用或未启用)。我不会推荐这个。
2. 路由命令:
public static RoutedCommand MyButtonCommand = new RoutedCommand();
private void CommandBinding_MyButtonEnabled(object sender, CanExecuteRoutedEventArgs e) {
e.CanExecute = Db.Monitor.Status==DeviceStatuses.Green;
}
并在 XAML 中绑定到它:
<Window.CommandBindings>
<CommandBinding
Command="{x:Static p:Window1.MyButtonCommand}"
Executed="buttonMyButton_Executed"
CanExecute="CommandBinding_MyButtonEnabled" />
</Window.CommandBindings>
<Button Content="My Button" Command="{x:Static p:Window1.MyButtonCommand}"/>
3. 实施 ICommand:
public class MyCmd : ICommand {
public virtual bool CanExecute(object parameter) {
return Db.Monitor.Status==DeviceStatuses.Green;
}
}
这里的命令是适当视图模型的属性:
class MyViewModel {
public MyCmd myCcmd { get; set; }
}
并在 XAML 中绑定到它:
<Button Content="My Button" Command="{Binding myCmd}"/>
第三种方法通常是最灵活的。您需要将具有您的状态属性的视图模型注入到 Command 构造函数中,以便您可以实现 CanExecute 逻辑。