Binding MonoTouch MVVMCross绑定到实例变量

Binding MonoTouch MVVMCross绑定到实例变量,binding,xamarin.ios,mvvmcross,Binding,Xamarin.ios,Mvvmcross,这听起来可能很愚蠢,但我就是无法让绑定到实例变量(类型为string)的工作 在视图的xib中,我在IB中创建一个文本字段作为出口,然后可以将其绑定到viewModel的string属性。但是,它不允许我以相同的方式将视图的字符串变量绑定到viewModel的属性 有人知道这是故意的,还是我遗漏了什么?绑定代码是- this.AddBindings( new Dictionary<object, string>() { { TextFieldT

这听起来可能很愚蠢,但我就是无法让绑定到实例变量(类型为string)的工作

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

有人知道这是故意的,还是我遗漏了什么?绑定代码是-

this.AddBindings(
     new Dictionary<object, string>()
     {
          { TextFieldTemp, "{'Text':{'Path':'AboutText'}}" },
     });
this.AddBindings(
新字典()
{
{TextFieldTemp,“{'Text':{'Path':'AboutText'}}”,
});

通过阅读您的问题,我认为您的意思是视图本身有一个字符串类型的字段

您的代码:

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

为了解释:
{this,“{'StringTemp':{'Path':'AboutText'}}}
中的部分,可以将它们视为
{TargetObject,“{'TargetPropertyName':{'Path':'SourcePropertyName'}}
其中:

  • TargetObject(
    )是要在其上设置属性值的对象
  • TargetPropertyName(
    StringTemp
    )是您要设置的名称属性
  • SourcePropertyName(
    AboutText
    )是将作为值源的属性的名称
请注意,Mvx使用的是属性,而不是字段,因此
private string StringTemp{get;set;}
是可绑定的,但是
private string StringTemp不可用


如果您想。。。但是您需要设置一些自定义绑定信息来完成此操作-需要触发和捕获一些事件才能更新ViewModel(我将把它留到另一天!)


如果直接绑定不是您想要的,那么您可以始终订阅PropertyChanged并用更详细的代码处理通知。。。e、 g:

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

…但我个人倾向于避免使用这种类型的代码…

您所说的“但是,它不允许我以相同的方式将视图的字符串变量绑定到viewModel的属性”是什么意思-您的“视图的字符串变量”是什么?我想我是在问“什么是TextFieldTemp?”@Stuart-TextFieldTemp是我在IB中添加的UITextField,我已经绑定到ViewModel的属性。但是,我更喜欢绑定到视图的一个实例变量,因为我想在显示它之前对值进行一些处理。。。作为对这个评论的回应,你也可以考虑使用ValueQueVter来做“DO”——或者你也可以考虑手工制作一个事件处理程序——我将把它添加到答案…谢谢!这非常有效(我不需要双向)-我们对MVVMCross有点陌生,所以我希望我不会用问题淹没你。。。还感谢PropertyChanged位,我可以看到它在一些情况下是多么有用。忘记添加-我不能使用转换器的原因是我得到了UIWebView的HTML,我需要告诉它来加载数据。酷-如果你需要自定义绑定,那么代码有点像droid的东西-请参阅-感谢使用StackOverflow和GitHub问题-当然是我的首选:)对于简短的问题,你也可以尝试-但我真的要离开这个国家过周末了:)
ViewModel.PropertyChanged += (s,e) => 
{
    if (e.PropertyName == "AboutText")
    {
         // do something complicated here with the new ViewModel.AboutText value
    }
};