MvvmCross 绑定的变化
Changes in MvvmCross bindings
嗨 Xamarin/MvvmCross 开发者,
这只是出于好奇而提出的问题。在我正在开发的其中一个应用程序中,一些行为发生了变化。特别是在 iOS 将 UISwitch "On" 值绑定到 ViewModel 中的布尔值时。 属性 上的 getter 在应用绑定时触发,setter 在翻转开关时触发,但 UI 不反映它。逼我从 just
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
- 关于可能导致此问题的任何猜测?以及您认为这可能会影响的其他部分,所以如果 none 存在,我就不必去寻找错误。命令、文本和自定义控件绑定工作正常(据我测试)
如果这个问题更适合其他地方,请告诉我,我只是对这种行为感到好奇。
谢谢
正如我们在 OP 的评论中计算出的那样,切换事件已链接出来。因此,绑定什么也没做。
解决此问题的最简单方法是将以下代码添加到您的 LinkerPleaseInclude.cs 文件中,MvvmCross 在 Startup NuGet 中通过可用于 Visual Studio 和 Xamarin Studio 的模板提供了该代码:
public void Include(UISwitch sw)
{
sw.On = !sw.On;
sw.ValueChanged += (sender, args) =>
{
sw.On = false;
};
}
这将告诉链接器直接使用 ValueChanged 事件和 On 属性,因为 LinkerPleaseInclude class 使用 Preserve 属性。
嗨 Xamarin/MvvmCross 开发者,
这只是出于好奇而提出的问题。在我正在开发的其中一个应用程序中,一些行为发生了变化。特别是在 iOS 将 UISwitch "On" 值绑定到 ViewModel 中的布尔值时。 属性 上的 getter 在应用绑定时触发,setter 在翻转开关时触发,但 UI 不反映它。逼我从 just
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
- 关于可能导致此问题的任何猜测?以及您认为这可能会影响的其他部分,所以如果 none 存在,我就不必去寻找错误。命令、文本和自定义控件绑定工作正常(据我测试)
如果这个问题更适合其他地方,请告诉我,我只是对这种行为感到好奇。
谢谢
正如我们在 OP 的评论中计算出的那样,切换事件已链接出来。因此,绑定什么也没做。
解决此问题的最简单方法是将以下代码添加到您的 LinkerPleaseInclude.cs 文件中,MvvmCross 在 Startup NuGet 中通过可用于 Visual Studio 和 Xamarin Studio 的模板提供了该代码:
public void Include(UISwitch sw)
{
sw.On = !sw.On;
sw.ValueChanged += (sender, args) =>
{
sw.On = false;
};
}
这将告诉链接器直接使用 ValueChanged 事件和 On 属性,因为 LinkerPleaseInclude class 使用 Preserve 属性。