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

5

我有一些命令绑定:

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

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

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

各位,感谢您们的回答,对于问题的重复我表示抱歉。


1
你可以创建一个样式(Style)来为按钮设置一个数据触发器(DataTrigger),当 {Binding Save} 等于 x:Null 时禁用该按钮。 - Heinzi
谢谢!我找到了相同的解决方案:https://dev59.com/slLTa4cB1Zd3GeqPb5p7#4424241。但是我无法将您的答案标记为已接受。 - Rover
谢谢。我已将我的评论添加为“真正的答案”(并且顺便加上了您的链接),所以您现在可以接受它了。 :-) - Heinzi
5个回答

8

定义一个命令,始终返回false以阻止CanExecute。在全局位置(例如App.Xaml)声明此命令。您可以将此空命令指定为所有命令绑定的FallbackValue,以期望首先得到null值。

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

6

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}}" />

1

我不确定你能否实现这个。不过,另一种选择是最初使用一个基本的ICommand来初始化Command对象,其中CanExecute仅返回False。当你准备好放置真正的命令时,你可以替换它。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接