WPF数据绑定: !value

21 浏览
0 Comments

WPF数据绑定: !value

此问题在这里已有答案:

如何在WPF中绑定逆布尔属性?

我有一个按钮:


在ViewModel中,我有一个属性IsLoaded。我不想编写属性IsNotLoaded,但我想在绑定中使用IsLoaded并在IsLoaded = true时禁用按钮。

如何实现类似以下内容:


附言:如果比编写其他属性更难,我将使用IsNotLoaded属性。

admin 更改状态以发布 2023年5月23日
0
0 Comments

虽然转换器的答案都是有效的,但您可能想查看另一种方法:命令。

在WPF(和某种程度上在Silverlight中),您可以将ICommand绑定到该按钮。因此,如果在ViewModel中创建了名为CancelLoadingCommand的属性,该属性实现了ICommand,则可以将该按钮绑定如下:

在ViewModel中实现CancelLoadingCommand可能如下所示:

    public ICommand CancelLoadingCommand
    {
        get
        {
            if (_cancelLoadingCommand== null)
            {
                this._cancelLoadingCommand= new RelayCommand(
                    delegate
                    {
                        // Cancel the loading process.
                    },
                    delegate
                    {
                        return !this.IsLoaded;
                    }
                );
            }
            return _cancelLoadingCommand;
        }
    }

请注意,此处使用的是RelayCommand(它是PRISM或MVVM-Light框架的一部分)。我建议您也了解其中之一。

我希望这可以帮助您。

0
0 Comments

常规方法是创建一个IValueConverter,将反转您的布尔值。虽然创建此类比添加新属性更难,但它是完全可重用的,因此稍后,您可以在其他绑定中重复使用它(而不会污染ViewModel与大量的!Property属性)。

此类将类似于:

[ValueConversion(typeof(bool), typeof(bool))]
public class InvertBoolConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool booleanValue = (bool)value;
        return !booleanValue;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool booleanValue = (bool)value;
        return !booleanValue;
    }
}

然后,您将将其添加到资源中:


一旦您拥有这个,您将使用它:

0