【发布时间】:2018-06-26 06:32:19
【问题描述】:
按钮未在命令启用、doEnable 方法上启用。单击方法是禁用按钮。 按钮 IsEnabled 与 ViewModel 公共属性 IsEnable 绑定,该属性在 doEnable 上设置为 true。 请告知以下代码中有什么问题
XAML:
<Button Content="{Binding DataText}" Height="30" Width="80" Command="{Binding Enable}" Click="ButtonBase_OnClick" IsEnabled="{Binding IsEnable}" ></Button>
Window2.cs:
public partial class Window2 : Window
{
public Window2()
{
InitializeComponent();
DataContext = new ButtonEnableViewModel();
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
if(sender is Button btn)
btn.IsEnabled = false;
}
}
ButtonEnableViewModel.cs
class ButtonEnableViewModel : INotifyPropertyChanged
{
public ButtonEnableViewModel()
{
IsEnable = true;
DataText = "Click Here";
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChange(string name)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
private RelayCommand _enableCmd;
public RelayCommand Enable => _enableCmd ?? (_enableCmd = new RelayCommand(doEnable));
public bool IsEnable { get; set; }
public string DataText { get; set; }
protected void doEnable(object obj)
{
IsEnable = true;
DataText = "Clicked";
OnPropertyChange(nameof(IsEnable));
OnPropertyChange(nameof(DataText));
}
}
【问题讨论】:
-
“请告知以下代码有什么问题” - 真是一团糟。为什么要混合代码隐藏和视图模型?您的
ButtonBase_OnClick将IsEnabled属性设置为false,但您的Enable命令将相同的属性设置为true。你想做什么? -
尝试启用 Button doEnable 方法。它是一个可执行的例子,
-
更改 isEnabled 属性的值会直接破坏绑定
-
@tabby 如果它破坏了绑定,如何修复它...
-
@Akhter:您应该使用命令的
CanExecute方法来禁用Button。ICommand接口的大多数实现都接受Predicate<object>,您可以使用它来告诉命令何时启用命令/按钮。