使用MvvmCross,如何获得bool的“相反”绑定?

时间:2017-09-28 05:58:24

标签: mvvmcross

在我的特定应用程序中,当IsSelected为false时,我希望背景为透明,即Transparent = true。我怀疑我必须写一个转换器,但也许有一种更简单的方法?

set.Bind(selectedBox).For(v => v.Transparent).To(vm => vm.IsSelected).OneWay();

看起来有一个WithConversion< ...>可能性。也许我需要一个NotValueConverter?很难相信这在某个地方还没有实现....

更新。我将以下内容添加到我的核心

public class NotConverter : MvxValueConverter<bool, bool>
{
    protected override bool Convert(bool value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return !value;
    }

    protected override bool ConvertBack(bool value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return !value;
    }
}

但它似乎没有被扫描和

拾取
set.Bind(selectedBox).For(v => v.Transparent).To(vm => vm.IsSelected).WithConversion("Not").OneWay();

没有任何区别。

2 个答案:

答案 0 :(得分:1)

转换器需要以ValueConverter结尾才能被MvvmCross自动接收。您还可以使用通用类型来使用WithConversion

set.Bind(selectedBox).For(v => v.Transparent).To(vm => vm.IsSelected).WithConversion<NotConverter>().OneWay();

我认为&#34;不是&#34;是一个内置的转换器,我已经在Android上使用它,但到目前为止我无法找到任何东西。

答案 1 :(得分:0)

我对此感到很好奇,所以我开始浏览MvvmCross代码。在Android上,您可以执行以下操作:

Class_Loader

可行,但实际上是MyClass1.Number而不是任何app:MvxBind="Enabled !SomeBoolean" 。因此,以流畅的形式应该可以解决问题:

MvxInvertedValueCombiner

我实际上从未以这种方式使用过它,但是它似乎可以工作。此外,似乎似乎在任何值转换器之前都应用了值组合器,因此,假设您对ValueConverter感到厌倦,可以在Android上执行以下操作:

set.Bind(selectedBox).For(v => v.Transparent).ByCombining(new MvxInvertedValueCombiner(), vm => vm.IsSelected)