2011-03-03 32 views
4

我有一些命令綁定:WPF:MVVM - 禁用按鈕,如果命令爲null

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

保存是可以從列表中選擇某個對象的命令。 在初始狀態下沒有任何選定對象,因此綁定不起作用,並且不會調用CanExecute。我如何禁用使用MVVM的這個按鈕?

解決方法:WPF/MVVM: Disable a Button's state when the ViewModel behind the UserControl is not yet Initialized?

,大家好,感謝您的答案和問題的重複抱歉。

+1

您可以創建按鈕的樣式與禁用按鈕時{結合保存}等於x一個DataTrigger:空。 – Heinzi 2011-03-03 12:37:41

+0

謝謝!我找到了相同的解決方案:http://stackoverflow.com/questions/4423746/wpf-mvvm-disable-a-buttons-state-when-the-viewmodel-behind-the-usercontrol-is-n/4424241#4424241。但我無法將您的答案標記爲已接受。 – Rover 2011-03-03 12:45:08

+0

謝謝。我已經將我的評論添加爲「真正的答案」(並且冒着添加鏈接的自由),所以現在就可以接受它。 :-) – Heinzi 2011-03-03 16:55:52

回答

1

我不確定你能否做到這一點。然而,另一種方法是初始化Command對象,並使用基本的ICommand,其中CanExecute只返回False。當你準備好真正的命令時,你可以替換它。

6

定義的命令總是返回false,CanExecute。在全球範圍內聲明它,例如在你的App.Xaml中。您可以指定這個空命令,然後將其作爲所有命令綁定的FallbackValue,您首先需要一個空值。

<Button Command="{Binding Save,FallbackValue={StaticResource KeyOfYourEmptyCommand}}" /> 
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}}" />