1

这可能听起来很愚蠢,但我只是无法绑定到实例变量(字符串类型)来工作。

在我视图的 xib 中,我在 IB 中创建了一个文本字段作为插座,然后我可以将它绑定到我的 viewModel 的字符串属性。但是,它不会让我以相同的方式将视图的字符串变量绑定到 viewModel 的属性。

有谁知道这是设计使然,还是我遗漏了什么?绑定代码是 -

this.AddBindings(
     new Dictionary<object, string>()
     {
          { TextFieldTemp, "{'Text':{'Path':'AboutText'}}" },
     });
4

1 回答 1

2

通过阅读您的问题,我认为您所说的是 View 本身具有字符串类型的字段...

你的代码:

this.AddBindings(
     new Dictionary<object, string>()
     {
          { StringTemp, "{'Text':{'Path':'AboutText'}}" },
     });

正在尝试将所Text引用的对象上的属性绑定到 ViewModelStringTemp中的任何内容。AboutText


要设置StringTemp字符串本身,您应该能够使用以下方式绑定到它:

 this.AddBindings(
      new Dictionary<object, string>()
      {
           { this, "{'StringTemp':{'Path':'AboutText'}}" },
      });

只是为了解释: 中的部分{ this, "{'StringTemp':{'Path':'AboutText'}}" },这些可以被认为是{ TargetObject, "{'TargetPropertyName':{'Path':'SourcePropertyName'}}" }

  • TargetObject ( this) 是您要设置属性值的对象
  • TargetPropertyName ( StringTemp) 是您要设置的名称属性
  • SourcePropertyName ( AboutText) 是将作为值的来源的属性的名称

请注意,Mvx 使用属性——而不是字段——所以private string StringTemp {get;set;}是可绑定的,但private string StringTemp;不是。


如果您愿意,您也可以为此字符串引用进行双向绑定...但是您需要设置一些自定义绑定信息来执行此操作 - 需要触发和捕获一些事件才能更新 ViewModel (我将把它留到另一天!)


对于直接绑定不是您想要的情况,您可以随时订阅 PropertyChanged 并以更详细的代码处理通知......例如:

ViewModel.PropertyChanged += (s,e) => 
{
    if (e.PropertyName == "AboutText")
    {
         // do something complicated here with the new ViewModel.AboutText value
    }
};

...但我个人倾向于尽可能避免使用这种类型的代码...

于 2012-06-07T11:20:15.823 回答