需要帮助在mvvmcross Windows phone 8流畅绑定与转换



我有点卡在得到流畅的绑定/转换工作。我有以下工作

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/native - econverters:

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();
  }
}

但是我的转换器从来没有被调用。正如我所说的,我的绑定工作得很好,所以我在电话项目中缺少什么来调用转换器?

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;
            }
        }

相关内容

  • 没有找到相关文章

最新更新