繁体   English   中英

WPF:MVVM - 如果命令为null,则禁用按钮

[英]WPF: MVVM - disable button if command is null

我对某些命令有约束力:

<Button Command="{Binding Save}" />

保存是可以从列表中选择的某个对象的命令。 在初始状态下,没有任何选定的对象,因此绑定不起作用,并且不会调用CanExecute 如何使用MVVM禁用此按钮?

解决方案: WPF / MVVM:当UserControl后面的ViewModel尚未初始化时,禁用Button的状态?

伙计们,感谢您的回答,并对不起重复的问题。

定义始终向CanExecute返回false的命令。 在全局位置声明它,例如在App.Xaml中。 您可以将此empty-command指定为所有命令绑定的FallbackValue ,您希望首先使用null值。

<Button Command="{Binding Save,FallbackValue={StaticResource KeyOfYourEmptyCommand}}" /> 

您可以在XAML中创建一个触发器,当命令等于x:Null时禁用Button。

在这个问题的答案中可以找到一个例子: WPF / MVVM:当UserControl后面的ViewModel尚未初始化时,禁用Button的状态?

我不确定你能做到这一点。 但是,另一种方法是使用基本ICommand初始化Command对象,其中CanExecute只返回False。 然后,当您准备好使用实际命令时,可以替换它。

创建一个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}}" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM