【发布时间】:2014-02-10 13:50:01
【问题描述】:
第一次使用 MvvmCross 值转换器。我创建了一个值转换器来处理布尔之间的数据操作?我的视图中的元素和我的视图模型中的布尔属性。
public sealed class NullableBooleanValueConverter : MvxValueConverter<bool, bool?>
{
// ViewModel -> View
protected override bool? Convert(bool value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (bool?)value;
}
// View -> ViewModel
protected override bool ConvertBack(bool? value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value ?? false;
}
}
当我在视图的 ViewDidLoad 中时,我已将视图元素绑定到视图模型。
var set = this.CreateBindingSet<SettingsView, SettingsViewModel>();
set.Bind(wifiOnlyElement).For(View => View.BooleanValue).To(ViewModel => ViewModel.ConnectOnWifiOnly).WithConversion("NullableBoolean").TwoWay();
set.Apply();
注意:我在 set.Bind 中添加了 .TwoWay() 绑定修饰符,认为模式可能必须明确说明,无需更改。
当视图出现时,会调用 NullableBooleanValueConverter 的 Convert 方法。
但是,当视图关闭时,并没有调用对应的 ConvertBack 方法。
基于this question 我怀疑我没有绑定到正确的属性。我正在创建绑定的屏幕控件是一个自定义 UITableViewCell,它源自 Xamarin 的 Dialog/Element 类,并且此屏幕控件上的可为空的 BooleanValue 是公共的,并且在点击元素时存储真/假值。
BooleanValue 是一个名为 CheckboxElement 的 Dialog/Element 类的公共属性,它继承自基本 Element 类。
NSObject
|_ Element
|_ CheckboxElement
.BooleanValue
CheckboxElement 中有一个名为 Selected 的被覆盖属性,它会在点击元素时更改 BooleanValue 的值。
public override void Selected(DialogViewController dvc, UITableView tableView, NSIndexPath indexPath)
{
BooleanValue = !BooleanValue;
...
}
Selected 由 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);
}
看起来没有任何干扰。
如果您需要更多信息,请告诉我。提前致谢。
【问题讨论】:
-
您能否编辑问题以添加
BooleanValue在视图上的内容,以及在绑定更改时通知绑定的内容。例如,它是一个复选框吗? -
@Stuart - 在内联上方添加了额外的 BooleanValue 信息。如果我需要详细说明或发布更多代码,请告诉我。
标签: xamarin.ios mvvmcross