我有点卡在得到流畅的绑定/转换工作。我有以下工作
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;
}
}