[英]How to enable/disable comboBox items for different comboBoxes in wpf by click in one using MVVM pattern?
[英]How does one "disable" a button in WPF using the MVVM pattern?
我正在嘗試掌握 WPF 和 MVVM,並且取得了良好的進展。 WPF 和 MVVM 方面進展順利。
但是,XAML 和數據綁定方面是另一回事:)
我將如何“禁用”按鈕?
例如,我的視圖模型中有一個 CanClose 屬性,用於確定當前是否可以關閉應用程序。 如果工作線程停止執行某事,則此屬性設置為 false,我想將按鈕灰顯或以某種方式通過某種綁定在視覺上禁用“關閉”按鈕。
我該怎么做呢?
謝謝!
編輯 -
可惜我只能接受一個答案。
這兩個答案對我幫助很大。 在 Kent 的帖子中,他更進一步解釋了為什么應該在應用程序中實現命令基礎結構,而不是像我問的那樣禁用按鈕:
以及我原來問題的答案:
只需將 Button 的IsEnabled屬性綁定到 CanClose:
<Button IsEnabled="{Binding CanClose}"/>
通過使用命令模式。 在您的視圖模型中:
public class MyViewModel : ViewModel
{
private readonly ICommand someCommand;
public MyViewModel()
{
this.someCommand = new DelegateCommand(this.DoSomething, this.CanDoSomething);
}
public ICommand SomeCommand
{
get { return this.someCommand; }
}
private void DoSomething(object state)
{
// do something here
}
private bool CanDoSomething(object state)
{
// return true/false here is enabled/disable button
}
}
在您的 XAML 中:
<Button Command="{Binding SomeCommand}">Do Something</Button>
閱讀這篇文章以了解有關DelegateCommand
更多信息。
如果您返回 ICommand 的 CanExecute 值為 false,則 Button 將被禁用。 因此,無論您的按鈕綁定到什么命令,當您想禁用它時,看看您是否可以返回一個值為 false 的 CanExecute。
這也有效:
查看:
<Button>
<Button.Style>
<Style>
<Setter Property="Content" Value="Scream" />
<Style.Triggers>
<DataTrigger Binding="{Binding btnEnabled}" Value="True">
<Setter Property="IsEnabled" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
視圖模型:
private bool _btnEnabled;
public bool btnEnabled
{
get { return _btnEnabled; }
set
{
if (_btnEnabled != value)
{
_btnEnabled = value;
OnPropertyChanged();
}
}
}
ViewModel 文件中的更改:
public bool IsButtonEnabled { get { return _isButtonEnabled; }
set
{
if (_isButtonEnabled == value)
{
return;
}
_isButtonEnabled = value;
OnPropertyChanged("IsButtonEnabled");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
Button 的 XAML 文件中的更改:IsEnabled="{Binding IsButtonEnabled}"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.