具有复杂格式字符串的 MVVM 交叉绑定
MVVM Cross binding with complex format string
我需要扩展 Stuart's answer,以便在 运行 时间为 iOS 格式化 MVVM 交叉中的字符串。我想在 运行 时间传入一个复杂对象并在值转换器中对其求值,以基本上实现我在 android 上使用 Tibet 绑定可以实现的相同功能,如下所示:
local:MvxBind="Text 'Awaiting ' + Name + ' For 10 Minutes' " />
目前已尝试
set.Bind(txtTitle).To(vm => vm.Name).WithConversion("StringFormatPlus", new { before = "Awaiting", after = " For 10 minutes" });
我已经尝试将对象参数转换为动态参数,但它需要引用 Microsoft c sharp dll,所以我不确定是否可以这样做。
public class StringFormatPlusValueConverter : MvxValueConverter
{
public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return null;
if (parameter == null)
return value;
var dynamicParameter = parameter as dynamic;
var before = dynamicParameter.before;
var after = dynamicParameter.after;
var format = "{0} {1} {2}";
return string.Format(format, before, value, after);
}
}
我一直在使用的解决方法是在视图模型上创建一个额外的 getter 属性,然后按照我喜欢的方式进行格式化,并绑定到 iOS 视图控制器中的视图模型.它可以工作,但并不理想,并且用强耦合的视图逻辑使我的视图模型混乱。
您可以使用 SourceDescribed
方法通过 Fluent Binding 实现您想要的效果。在 MvvmCross.Binding.BindingContext
命名空间中找到。
public MvxFluentBindingDescription<TTarget, TSource> SourceDescribed(MvxBindingDescription description);
public MvxFluentBindingDescription<TTarget, TSource> SourceDescribed(string bindingDescription);
实现示例:
set.Bind(txtTitle).SourceDescribed("'Awaiting ' + Name + ' For 10 Minutes'");
我需要扩展 Stuart's answer,以便在 运行 时间为 iOS 格式化 MVVM 交叉中的字符串。我想在 运行 时间传入一个复杂对象并在值转换器中对其求值,以基本上实现我在 android 上使用 Tibet 绑定可以实现的相同功能,如下所示:
local:MvxBind="Text 'Awaiting ' + Name + ' For 10 Minutes' " />
目前已尝试
set.Bind(txtTitle).To(vm => vm.Name).WithConversion("StringFormatPlus", new { before = "Awaiting", after = " For 10 minutes" });
我已经尝试将对象参数转换为动态参数,但它需要引用 Microsoft c sharp dll,所以我不确定是否可以这样做。
public class StringFormatPlusValueConverter : MvxValueConverter
{
public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return null;
if (parameter == null)
return value;
var dynamicParameter = parameter as dynamic;
var before = dynamicParameter.before;
var after = dynamicParameter.after;
var format = "{0} {1} {2}";
return string.Format(format, before, value, after);
}
}
我一直在使用的解决方法是在视图模型上创建一个额外的 getter 属性,然后按照我喜欢的方式进行格式化,并绑定到 iOS 视图控制器中的视图模型.它可以工作,但并不理想,并且用强耦合的视图逻辑使我的视图模型混乱。
您可以使用 SourceDescribed
方法通过 Fluent Binding 实现您想要的效果。在 MvvmCross.Binding.BindingContext
命名空间中找到。
public MvxFluentBindingDescription<TTarget, TSource> SourceDescribed(MvxBindingDescription description);
public MvxFluentBindingDescription<TTarget, TSource> SourceDescribed(string bindingDescription);
实现示例:
set.Bind(txtTitle).SourceDescribed("'Awaiting ' + Name + ' For 10 Minutes'");