c# - 具有复杂格式字符串的 MVVM 交叉绑定(bind)

标签 c# binding xamarin.ios format mvvmcross

我需要扩展到 Stuart's answer与在运行时在 iOS 的 MVVM 交叉中格式化字符串有关。我想在运行时传入一个复杂的对象并在值转换器中对其求值,以基本上实现我在 Android 上使用 Tibet 绑定(bind)可以实现的相同功能,如下所示:

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

我一直在使用的解决方法是在 View 模型上创建一个额外的 getter 属性,我按照自己喜欢的方式进行格式化,并绑定(bind)到 iOS View Controller 中的那个属性。它可以工作,但并不理想,并且用强耦合的 View 逻辑使我的 View 模型变得困惑。

最佳答案

您可以使用 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'");

关于c# - 具有复杂格式字符串的 MVVM 交叉绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38092374/

相关文章:

c# - 如何在没有返回值的情况下从 Linq 语句调用函数?

c# - 如何在给定条件的情况下从递归层次结构返回节点路径?

c# - C# 中的任意精度小数

Java:检查哪些进程绑定(bind)到端口?

ios - UIPageViewController 第二个 View 变为空白

command-line - 使用 mdtool 编译 monotouch 应用程序失败,可在 MonoDevelop 中运行

c# - 结构数组与对象数组 C#

binding - IBM MQ : Multiple QMs in JMS bindings file

c# - 绑定(bind) boolean 值

c# - 如何在 Xamarin.Forms 上发送短信