这可能听起来很愚蠢,但我无法获得绑定到实例变量(类型为string)的工作。
在我的视图的xib中,我在IB中创建了一个文本字段作为插座,然后我可以将它绑定到我的viewModel的字符串属性。但是,它不会让我以同样的方式将我的视图的字符串变量绑定到viewModel的属性。
有人知道这是设计的,还是我错过了什么?绑定代码是 -
this.AddBindings(
new Dictionary<object, string>()
{
{ TextFieldTemp, "{'Text':{'Path':'AboutText'}}" },
});
答案 0 :(得分:2)
通过阅读你的问题,我认为你所说的是View本身有一个字符串类型的字段......
您的代码:
this.AddBindings(
new Dictionary<object, string>()
{
{ StringTemp, "{'Text':{'Path':'AboutText'}}" },
});
正尝试将Text
引用的对象上的属性StringTemp
绑定到ViewModel上AboutText
中的任何内容。
要设置StringTemp
字符串本身,您应该可以使用以下内容绑定它:
this.AddBindings(
new Dictionary<object, string>()
{
{ this, "{'StringTemp':{'Path':'AboutText'}}" },
});
只是解释一下{ this, "{'StringTemp':{'Path':'AboutText'}}" }
中的部分,可以将它们视为{ TargetObject, "{'TargetPropertyName':{'Path':'SourcePropertyName'}}" }
其中:
this
)是您要在StringTemp
)是您要设置的名称属性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
}
};
...但我个人倾向于避免使用这种类型的代码......