command
のプロパティが一部のコレクションの現在のアイテムのICommand
にバインドされているボタンがあるとします。現在のアイテムがない場合、現在のアイテムのICommandにバインドされたボタンを無効にするにはどうすればよいですか?
コレクションがnull
の場合、ボタンは有効のままで、クリックすると操作がないように見えます。代わりにボタンが無効のままであるようにしたい。私は、コレクションがnullのときは常にボタンを無効にしておくために次のことを考え出しました。しかし、少し複雑すぎて、(おそらく)がより自然でシンプルでMVVMのように遂行されていると思われます。
したがって、疑問点:そのボタンを無効にしておくと、コードビハインドを使用しないのが理想的です。
の.xaml:
<Button Content="Do something" >
<Button.Command>
<PriorityBinding>
<Binding Path="Items/DoSomethingCmd" />
<Binding Path="DisabledCmd" />
</PriorityBinding>
</Button.Command>
</Button>
は.cs:
public class ViewModel : NotificationObject
{
ObservableCollection<Foo> _items;
public DelegateCommand DisabledCmd { get; private set; }
public ObservableCollection<Foo> Items {
get { return _items; }
set { _items = value; RaisePropertyChanged("Items"); }
}
public ViewModel()
{
DisabledCmd = new DelegateCommand(DoNothing, CantDoAnything);
}
void DoNothing() { }
bool CantDoAnything()
{
return false;
}
}
編集:
ノートのカップル:
- I 私はラムダ式を使用できますが、この例のコードではわかりません。
- I knowどのような述語であるか。
DoSomethingCmd.CanExecute
で何かをしても、現在のアイテムがないうちにアクセスするにはDoSomethingCmd
が存在しないため、何か手助けをします。- 質問を再集中します:
DisabledCmd
の使用を避けるにはどうすればよいですか?私はDoSomethingCmd
のように私が探しているものではないので興味を持っていません。私はそうでなければこの質問をしません。だから私は、基本的解決策として、この答えを採用:
別の編集WPF/MVVM: Disable a Button's state when the ViewModel behind the UserControl is not yet Initialized?
それはhbarckが提案まさに、私は信じている、です。
標準のWPFコントロールの一部であるすべてのボタンを無効にすることはできませんか?コマンドの代わりにイベントハンドラを使用できます。 – STiLeTT