簡體   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