【发布时间】:2016-09-20 22:59:13
【问题描述】:
您好 Xamarin/MvvmCross 开发人员,
这只是出于好奇而提出的问题。在我正在开发的其中一个应用程序中,一些行为发生了变化。特别是在 iOS 上,将 UISwitch“On”值绑定到 ViewModel 中的布尔值。属性上的 getter 会在应用绑定时触发,以及在切换开关时触发 setter,但 UI 不会反映它。强迫我离开只是
var set = this.CreateBindingSet<SettingsView, SettingsViewModel>();
set.Bind(PushNotificationSwitch).For(s => s.On)
.To(vm => vm.ReceivePushNotifications);
set.Apply();
还必须在其下方添加以下内容(以使开关的 UI 反映该值)
var settingsViewModel = ((SettingsViewModel)ViewModel);
PushNotificationSwitch.On = settingsViewModel.ReceivePushNotifications;
我留下了绑定,以及反映 UI 状态的新代码,因为除了 UI 只是反映正确的状态之外,我还希望它在用户更改时更改我的 settingsService 中的状态。
我最近通过 Mac 上的 Xamarin Studio 进行了升级,我的 iOS Xam 版本是版本:10.0.0.6。不幸的是,我没有检查我从哪个版本升级,但我总是在看到有可用版本时立即升级,所以它应该是以前的稳定版本。
我的问题是:
- 你们中是否有人遇到过类似的问题,即以这种方式更改绑定?
- 由于 Android 绑定仍然可以正常工作,您认为这是 MvvmCross 或 iOS Xamarin Changes 中的问题
- 关于可能导致此问题的任何推测?以及您认为这可能会影响的其他部分,因此如果不存在错误,我将不必寻找错误。命令、文本和自定义控件绑定工作正常(据我测试)
如果这个问题更适合其他地方,请告诉我,我只是对这种行为感到好奇。
谢谢
【问题讨论】:
-
这种行为是在调试和发布版本上都显示还是仅在其中一个上显示?可能是链接器正在剥离代码。您的 LinkerPleaseInclude 文件中是否有任何用于开关的代码?
-
@Cheesebaron 调试和发布都会发生这种情况,我的 LinkerPleaseInclude 文件中没有任何开关代码。
-
你可以尝试添加:
public void Include(UISwitch sw) { sw.On = !sw.On; sw.ValueChanged += (sender, args) => { sw.On = false; }; } -
@Cheesebaron 工作了 :) 添加后查看日志,发现三周前 MvvmCross 的升级删除了它,我最近才回到项目,所以在我的脑海中是与 Xamarin 升级有关。我对没有正确检查不好。谢谢。
-
有帮助吗??
标签: xamarin xamarin.ios mvvmcross