此问题的完整来源可在此处找到: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
,也会出现此问题。也是我自己创造的元素......
答案 0 :(得分:1)
根据上述评论,这感觉就像是一些单独的问题:
BooleanElement未正确链接到MvxTouchDialogBindingSetup.cs - 我希望现在已修复此问题 - 请参阅此提交 - https://github.com/slodge/MvvmCross/commit/38e5f08acaffa6ac76d060d104f841f2765d234c - 使用您的测试项目进行测试
StyledStringElement可能只需要“踢”以强制重绘 - 所以我们可能需要调用cell.SetNeedsDisplay()
- 也许还需要cell.Backbground.SetNeedsDisplay()
- 我没有测试用例目前为此。
您的新单元格可能需要在Setup.cs中使用新的绑定条目进行链接
感谢您报告这些问题 - 以及跟进测试用例。我将看看我是否可以研究如何在mvx存储库中包含一些更正式的测试用例。
作为未来的工作项目,我也非常希望将Value
和ValueChanged
关系正式化 - 我认为可以提供一般规则,以便所有具有Value和ValueChanged的元素都支持数据绑定 - 添加为问题https://github.com/slodge/MvvmCross/issues/26。