我有一些命令绑定:
<Button Command="{Binding Save}" />
Save是一些可以从列表中选择的对象的命令。在初始状态下,没有任何选定的对象,因此绑定不起作用,CanExecute不会被调用。如何使用MVVM禁用此按钮?
解决方案:WPF/MVVM:当UserControl后面的ViewModel尚未初始化时禁用按钮的状态?
各位,感谢您们的回答,对于问题的重复我表示抱歉。
我有一些命令绑定:
<Button Command="{Binding Save}" />
Save是一些可以从列表中选择的对象的命令。在初始状态下,没有任何选定的对象,因此绑定不起作用,CanExecute不会被调用。如何使用MVVM禁用此按钮?
解决方案:WPF/MVVM:当UserControl后面的ViewModel尚未初始化时禁用按钮的状态?
各位,感谢您们的回答,对于问题的重复我表示抱歉。
定义一个命令,始终返回false以阻止CanExecute。在全局位置(例如App.Xaml)声明此命令。您可以将此空命令指定为所有命令绑定的FallbackValue,以期望首先得到null值。
<Button Command="{Binding Save,FallbackValue={StaticResource KeyOfYourEmptyCommand}}" />
您可以在XAML中创建一个触发器,当命令等于x:Null
时禁用按钮。
可以在此问题的答案中找到示例:WPF/MVVM:当UserControl背后的ViewModel尚未初始化时禁用Button状态?
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}}" />
我不确定你能否实现这个。不过,另一种选择是最初使用一个基本的ICommand来初始化Command对象,其中CanExecute仅返回False。当你准备好放置真正的命令时,你可以替换它。