代码之家  ›  专栏  ›  技术社区  ›  tofutim

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

  •  1
  • tofutim  · 技术社区  · 7 年前

    在我的特定应用程序中,我希望背景是透明的,即当IsSelected为false时,透明=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 回复  |  直到 7 年前
        1
  •  1
  •   Martijn00    7 年前

    转换器需要以 ValueConverter 由MvvmCross自动拾取。您还可以使用泛型类型来使用 WithConversion .

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

        2
  •  0
  •   Elte Hupkes    5 年前

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

    app:MvxBind="Enabled !SomeBoolean"
    

    MvxInvertedValueCombiner 这样做,不是任何 ValueConverter . 因此,在流畅的形式下,这应该可以做到:

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

    事实上,我从来没有用过这种方式,但它似乎有效。此外,似乎在任何值转换器之前应用了值组合器,所以假设您对此感到厌倦 MvxInvertedVisibilityValueConverter

    app:MvxBind="Visibility Visibility(!HideMe)"