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