2012-06-07 47 views
1

这听起来很愚蠢,但我无法获得绑定到实例变量(字符串类型)的工作。MonoTouch MVVMCross绑定到实例变量

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

有谁知道这是设计,还是我错过了什么?绑定代码 -

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

你是什么意思“但是,它不会让我,我的观点的字符串变量视图模型的属性绑定在一样的方法。” - 什么是你的“视图的字符串变量”?我想我问“什么是TextFieldTemp?” – Stuart

+0

@Stuart - TextFieldTemp是我在IB中添加的UITextField,我已将其绑定到ViewModel的属性。但是,我更愿意绑定到视图的实例变量之一,因为我想在显示它之前对值进行操作。 – SomaMan

+0

我已经回答了...回复此评论 - 您也可以考虑使用ValueConverter作为“做事情” - 或者您也可以考虑手工制作事件处理程序 - 我将其添加到答案中。 – Stuart

回答

2

从阅读你的问题,我想你说的是视图本身具有字符串类型的字段...

您的代码:

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

试图将StringTemp所指的对象上的属性Text绑定到ViewModel上的任何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 name属性(AboutText)是将成为价值的源泉属性的名称

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


你也可以做这个字符串参考双向绑定,如果你想......但你需要设置一些自定义的绑定信息,这样做 - 那里将需要一些触发的事件,并抓获为了更新视图模型(我会留给另一天!)


对于有些情况下直接结合是你在找不什么,那么你总是可以订阅的PropertyChanged和处理的通知更详细的代码...例如:

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

...但我个人倾向于避免这种类型的代码,我可以...

+0

谢谢!这工作完美(我不需要2路) - 我们对MVVMCross有点新,所以我希望我不会淹没你的问题...也感谢PropertyChanged位,我可以看看这可能会有用几次。 – SomaMan

+0

忘了补充 - 我无法使用转换器的原因是我得到了一个UIWebView的HTML,我需要告诉它加载它的数据。 – SomaMan

+0

酷 - 如果你需要自定义绑定,那么代码有点像机器人的东西 - 见http://stackoverflow.com/questions/10700445/in-mvvmcross-how-do-i-do-custom-bind-properties - 感谢您使用StackOverflow和GitHub问题 - 绝对是我的首选项:)对于简短的问题,您也可以尝试http://jabbr.net/#/rooms/mvvmcross - 但我实际上即将离开该国的周末:) – Stuart