【发布时间】:2012-09-03 14:26:41
【问题描述】:
此问题的完整来源可以在这里找到:https://github.com/Cheesebaron/MvvmCross.SettingsSample
我主要关心的是 SettingsView,我尝试在其中绑定一些简单的 BooleanElements:
this.Root = new RootElement("Settings")
{
new Section("Test", string.Format("Choose to see your own location on the map.{0}Choose to allow shake gestures.{0}Choose whether you want to receive notifications.", Environment.NewLine))
{
new BooleanElement("Show my location", ViewModel.ShowMyLocation).Bind(this, "{'Value':{'Path':'ShowMyLocation','Mode':'TwoWay'}}"),
new BooleanElement("Shake gestures", ViewModel.ShakeGestures).Bind(this, "{'Value':{'Path':'ShakeGestures','Mode':'TwoWay'}}"),
new BooleanElement("Notifications", ViewModel.Notifications).Bind(this, "{'Value':{'Path':'Notifications','Mode':'TwoWay'}}"),
},
};
我的问题在于绑定似乎只能以一种方式工作,即使我明确指定它是TwoWay。这两种方式绑定似乎在 WP7 和 Android 上运行良好,所以我知道视图模型没问题。但是要么我缺少一些用于双向绑定的代码,要么框架中有错误或缺失。
如果我尝试使用 CheckboxElement 或 StyledStringElement 等其他类型的元素,也会出现此问题。还有我自己制作的元素...
【问题讨论】:
-
感谢您的样品。对于布尔示例,我猜这一定是一个错误。可能是我在github.com/slodge/MvvmCross/blob/master/Cirrious/… 中包含了错误的类——也许 CheckboxElement 需要是 BaseBooleanElement。对于 StyledStringElement,我不确定 - 我真的不明白如何使 StyledStringElement 可编辑?今晚我回到 Mac 前,我会试着看看。
-
啊,等一下。 StyledStringElement 有效,但就像视图不会自行更新。因此,如果您点击单元格,它会更新。因此,由于某种原因,单元格没有收到更改通知。 (另一个问题?)
-
仍然在看这个(更新 XCode 和 Monotouch 和......),但使用 StyledStringElement 我想知道需要使用 cell.SetNeedsDisplay 强制重绘(也许还有 cell.Backbground.SetNeedsDisplay? )。更新完成后会查看这个。
-
如果您需要我测试一些东西,我会在星期四回到 Mac 电脑前。但我认为你调用 SetNeedsDisplay 是对的。 MonoTouch.Dialog 似乎并非旨在从其背后的代码更改视图中包含的值,并且当屏幕上出现强制重绘的触摸时效果会更好。
-
再次感谢 - 我已经推送了一些代码并针对您的示例应用程序进行了测试。布尔值现在似乎是双向更新的。 StyledStringElement 仍然没有任何进展 - 明天晚上将尝试启动并运行一个测试项目来看看这个!
标签: xamarin.ios monotouch.dialog mvvmcross