2014-02-10 49 views
1

第一次使用MvvmCross Value转换器。我创建了一个值转换器来处理bool之间的数据操作?元素在我的视图和我的视图模型中的布尔属性。为什么不调用MvvmCross Value Converter的ConvertBack方法?

​​

而我在视图的ViewDidLoad中将我的视图元素绑定到视图模型。

var set = this.CreateBindingSet<SettingsView, SettingsViewModel>(); 
set.Bind(wifiOnlyElement).For(View => View.BooleanValue).To(ViewModel => ViewModel.ConnectOnWifiOnly).WithConversion("NullableBoolean").TwoWay(); 
set.Apply(); 

注:我添加了.TwoWay()结合修改器set.Bind,思维模式可能必须明确指出,没有任何变化。

当视图出现时,调用NullableBooleanValueConverter的Convert方法。

但是,当视图关闭时,不会调用相应的ConvertBack方法。

基于this question我怀疑我没有绑定到正确的属性。我创建绑定的屏幕控件是Xamarin对话框/元素类的后继自定义UITableViewCell,此屏幕控件上的可空布尔值是公共的,这是在轻击元素时存储真/假值的位置。

BooleanValue是名为CheckboxElement的Dialog/Element类上的公共属性,它继承自基础Element类。

NSObject 
    |_ Element 
     |_ CheckboxElement 
      .BooleanValue 

有一个在CheckboxElement被覆盖的属性调用选择,当元素被窃听改变BooleanValue中的价值。

public override void Selected(DialogViewController dvc, UITableView tableView, NSIndexPath indexPath) 
{ 
    BooleanValue = !BooleanValue; 
    ... 
} 

所选内容由DialogViewController的RowSelected方法调用。

public override void RowSelected(UITableView tableView, NSIndexPath indexPath) 
{ 
    Container.Selected(indexPath); 
} 

它调用DialogViewController的Selected方法(元素是CheckboxElement)。

public virtual void Selected(NSIndexPath indexPath) 
{ 
    var section = Root.Sections[indexPath.Section]; 
    var element = section.Elements[indexPath.Row]; 

    ActiveElement = element; 

    element.Selected(this, Root.TableView, indexPath); 
} 

看起来不像有什么事,有没有介入这。

让我知道你是否需要更多信息。提前致谢。

+0

你可以编辑问题来添加'BooleanValue'在视图上的内容,以及当它发生变化时通知绑定的内容。例如它是一个复选框? – Stuart

+0

@Stuart - 在内嵌上面添加了额外的BooleanValue信息。如果我需要详细说明或发布更多的代码,请告诉我。 – billmaya

回答

1

Mvvmcross依靠事件通知来告诉它值何时发生变化。

当事件通知不可用时,您可以编写自定义绑定来帮助MvvmCross知道ui更新的时间。有关这方面的,见N = 28 - 定制,在http://mvvmcross.blogspot.com

绑定Monotouch.Dialog的特定情况下,Mvvmcross提供它自己的分支,它包括双向绑定布尔元素,如基于UiSwitch元素。您可能会发现使用此mvvmcross分支更容易 - 有关更多信息,请在n + 1个视频中查找对话框。

相关问题