これについて移動する3つの方法があります。
あなたのボタンの1バインドでIsEnabledのpropetry(有効かどうか)BOOLにDeviceStatusからマッピングするためのコンバータを使用してStatusプロパティには。私はこれをお勧めしません。
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;
}
}
ここでコマンドのプロパティです適切なビューモデル:
class MyViewModel {
public MyCmd myCcmd { get; set; }
}
、あなたはXAMLでそれにバインド:
<Button Content="My Button" Command="{Binding myCmd}"/>
第三のアプローチは、通常、最も柔軟性があります。 CanExecuteロジックを実装できるように、ステータスプロパティを持つビューモデルをCommandコンストラクタに挿入する必要があります。
は、あなたが本当にあなたが本当のViewModelを使用したい場合は委任/ RelayCommandのものを検討する必要があり...あなたのコードがはるかに容易になり – blindmeis
あなたはVMブールButtonIsEnabledでプロパティを宣言し、直接ボタンとそれを結合することができプロパティIsEnabled = "{Binding ButtonIsEnabled}"であり、VMでは、条件に基づいてButtonIsEnabledをtrueまたはfalseに設定できます。しかし、ICommandを使用することができます。 –