我对某些命令有约束力:
<Button Command="{Binding Save}" />
保存是可以从列表中选择的某个对象的命令。 在初始状态下,没有任何选定的对象,因此绑定不起作用,并且不会调用 CanExecute 。如何使用MVVM禁用此按钮?
解决方案:WPF/MVVM: Disable a Button's state when the ViewModel behind the UserControl is not yet Initialized?
伙计们,感谢您的回答并抱歉重复提问。
答案 0 :(得分:6)
定义一个始终向CanExecute返回false的命令。在全局位置声明它,例如在App.Xaml中。你可以指定这个empty-command然后作为所有命令绑定的FallbackValue
,你首先想要一个空值。
<Button Command="{Binding Save,FallbackValue={StaticResource KeyOfYourEmptyCommand}}" />
答案 1 :(得分:5)
您可以在XAML中创建一个触发器,当命令等于x:Null
时禁用Button。
可以在这个问题的答案中找到一个例子:WPF/MVVM: Disable a Button`s state when the ViewModel behind the UserControl is not yet Initialized?
答案 2 :(得分:1)
我不确定你是否能够实现这一目标。但是,另一种方法是使用基本ICommand初始化Command对象,其中CanExecute只返回False。然后,当您准备好使用实际命令时,可以替换它。
答案 3 :(得分:1)
答案 4 :(得分:1)
创建一个NullToBooleanConverter并将IsEnabled
属性绑定到命令,通过转换器运行它:
class NullToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value != null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后
<UserControl.Resources>
<Extentions:NullToBooleanConverter x:Key="NullToBooleanConverter" />
</UserControl.Resources>
<Button Content="Hello" IsEnabled="{Binding Save, Converter={StaticResource NullToBooleanConverter}}" />