【问题标题】:Conditional Binding of Properties using MVVMCross使用 MVVMCross 条件绑定属性
【发布时间】:2015-05-08 02:36:56
【问题描述】:

使用 mvvmcross 绑定实现以下内容的最佳方法是什么:

if (ViewModel.NumberOfUsers > 1)
  set.Bind (NumberOfUsersLabel).To ("NumberOfUsers + ' Users'");
else
  set.Bind (NumberOfUsersLabel).To ("NumberOfUsers + ' User'");

非常感谢您的帮助!

【问题讨论】:

    标签: c# ios xamarin xamarin.ios mvvmcross


    【解决方案1】:

    通常,Mvvm 开发人员在 ValueConverter 中执行这种类型的格式化

    有关更多信息,请参阅https://github.com/MvvmCross/MvvmCross/wiki/Value-Converters

    这包括“time ago”示例,它显示了如何根据当前值更改字符串:

    public class MyTimeAgoValueConverter : MvxValueConverter<DateTime, string>
    {
        protected override string Convert(DateTime value, Type targetType, object parameter, CultureInfo cultureInfo)
        {
            var timeAgo = DateTime.UtcNow - value;
            if (timeAgo.TotalSeconds < 30)
            {
                return "just now";
            }
    
            if (timeAgo.TotalMinutes < 10)
            {
                return "a few minutes ago";
            }
    
            if (timeAgo.TotalMinutes < 60)
            {
                return "in the last hour";
            }
    
            if (timeAgo.TotalMinutes < 24*60)
            {
                return "in the last day";
            }
    
            return "previously";            
        }
    }
    

    【讨论】:

      【解决方案2】:

      我只想在您的视图模型中创建一个具有 getter 的属性。

      public string NumberOfUsersFormatted { get { return NumberOfUsers + " user"; } }
      

      然后在你的 ViewDidLoad 中:

      set.bind(NumberOfUsersLabel).To(NumberOfUsersFormatted);
      

      然后您可以将任何其他检查放入您的视图模型属性中。

      如果您不喜欢这样,您也可以设置自己的 ValueConverter 来附加正确的单词。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-20
        • 2014-05-10
        • 2017-05-05
        • 1970-01-01
        • 1970-01-01
        • 2014-12-16
        • 1970-01-01
        相关资源
        最近更新 更多