Xamarin.Mac MVVM模式的最佳实践

时间:2017-04-06 15:30:43

标签: c# cocoa xamarin mvvm data-binding

我正在开发一个我也喜欢运行的WPF桌面应用程序 Mac通过Xamarin.Mac。我非常谨慎地将核心分开 尽可能将代码编写到PCL中,并使特定于WPF的代码保持精简 尽可能。

UI架构是MVVM。我的所有视图模型都在实现 INotifyPropertyChanged,在我的核心PCL中。 WPF UI组件 然后可以直接绑定到那些viewmodel属性。

我的问题是:如何使用我的"便携式" 来自Xamarin.Mac端的PCL视图模型,以便我可以使用Cocoa 数据绑定吗

主要问题似乎是,为了与Cocoa互动 数据绑定,viewmodels必须从NSObject继承,使用 Register注释以公开属性,并使用 用于通知观察员的WillChangeValue / DidChangeValue方法。一世 我主要没有为PCL中的视图模型找到一种方法 因为如果那些相同的类我不能从NSObject继承它们 将继续在WPF方面使用。

我想避免使用MVVMCross或MVVMLight等框架,因为它们包含了许多我不需要的东西。但是,如果我没有其他方式可以使用它们。

1 个答案:

答案 0 :(得分:0)

具有讽刺意味......我在近一年后提到的同一个十字路口。 我能够在不使用MVVMLight或MVVMCross的情况下完成此任务。

在我的ViewModelBase中,我使用SetProperty API首先检查该值是否与之前的值不同。如果不同,我使用 MACOS 编译器定义相应地调用WillChangeValue / DidChangeValue,然后调用所有其他平台的RaisePropertyChanged。显然我使用 MACOS 编译器def来子类化NSObject。

我遇到了这个stackoverflow帖子,寻找将ICommand接口绑定到Xamarin.Mac按钮的方法。显然它比我想象的要难。

我想我可以偷看MVVMCross存储库,看看他们是如何完成这项任务的。 无论如何,我相信你现在已经解决了你的多pcl-MVVM困境。 如果您做了与我的方法不同的事情,请分享。