【问题标题】:need help in mvvmcross windows phone 8 fluent binding with conversion在 mvvmcross windows phone 8 流利绑定与转换中需要帮助
【发布时间】:2014-03-14 10:44:02
【问题描述】:

我很少坚持让流畅的绑定/转换工作。我有以下工作要做

set.Bind(TextBackStartColor).For(v => v.Text).To(vm => vm.TextBackStartColor).TwoWay()

但是当我尝试添加 WithConversion 时,我需要一些帮助来了解如何调用转换器

set.Bind(TextBackStartColor).For(v => v.Text).To(vm => vm.TextBackStartColor).TwoWay().WithConversion("Test")

在 xaml 中,转换器工作正常,在 Android 和 Touch 中,上述转换器工作正常。

我试过了 核心:

public sealed class TestValueConverter : MvxValueConverter<string, string>
{
  protected override string Convert(string value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
    string test = (string)value + "test";

    return test;
  }

  public string ConvertBack(string value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    return value;
  }
}

以及对应的Phone/NativeConverters:

namespace DCS.Phone.NativeConverters
{
  public class NativeTestValueConverter : MvxNativeValueConverter<TestValueConverter>
  {
  }
}

我也试过 电话/转换器

public sealed class TestConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    string test = (string)value+"test";

    return test;
  }

  public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
    throw new NotImplementedException();
  }
}

但我的转换器永远不会被调用。 正如我所说,我的绑定工作得很好,那么我在电话项目中缺少什么来调用转换器?

【问题讨论】:

    标签: windows-phone-8 binding mvvmcross fluent valueconverter


    【解决方案1】:

    Android 和 iOS 都自动获取 ValueConverter 名称 - 它们执行此操作的机制在 https://github.com/MvvmCross/MvvmCross/wiki/Value-Converters#referencing-value-converters-in-touch-and-droid 中进行了描述

    Windows 平台默认不这样做 - 因为 Windows 默认使用 Xaml 绑定。

    如果您想添加命名值转换器的这种用法,那么您可以使用 Windows Setup.cs 中的代码来执行此操作,例如:

           // call this in InitializeLastChance
           Mvx.CallbackWhenRegistered<IMvxValueConverterRegistry>(FillValueConverters);
    
           // add this method
           private FillValueConverters(IMvxValueConverterRegistry registry)
           {
                registry.Fill(ValueConverterAssemblies);
           }
    
           // add this property
           protected virtual List<Assembly> ValueConverterAssemblies
           {
                get
                {
                    var toReturn = new List<Assembly>();
                    toReturn.AddRange(GetViewModelAssemblies());
                    toReturn.AddRange(GetViewAssemblies());
                    return toReturn;
                }
            }
    

    【讨论】:

    • 嗨 Stuart,非常感谢您一如既往的快速回答。这有助于获得 CORE 转换器,但不是本机/设备转换器,以及如何获得 Mvx Color ValueConverters 等内置/插件转换器?
    • 让内置/插件 Mvx Color ValueConverters 工作,引用了 mvvmcross Color 插件。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2013-12-30
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多