これには 3 つの方法があります
。 1. ボタンの IsEnabledプロパティを Status プロパティにバインドし、Converter を使用して DeviceStatus から bool (有効または無効) にマップします。私はこれをお勧めしません。
2. RoutedCommands :
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;
}
}
ここで Command は、適切なビュー モデルのプロパティです。
class MyViewModel {
public MyCmd myCcmd { get; set; }
}
XAML でバインドします。
<Button Content="My Button" Command="{Binding myCmd}"/>
通常、3 番目のアプローチが最も柔軟です。CanExecute ロジックを実装できるように、ステータス プロパティを持つビュー モデルを Command コンストラクターに挿入する必要があります。