Xamarin.Mac MVVM 模式的最佳实践

4
我正在开发一款 WPF 桌面应用程序,同时也希望通过 Xamarin.Mac 在 Mac 上运行。我已经很注意将尽可能多的核心代码分离到一个 PCL 中,并且尽可能保持 WPF 特定的代码最少。
UI 架构采用 MVVM 模式。所有实现 INotifyPropertyChanged 接口的 ViewModels 都在我的核心 PCL 中。WPF UI 组件可以直接绑定这些 ViewModel 属性。
我的问题是:如何在 Xamarin.Mac 端使用我的“可移植”PCL ViewModel,以便我可以使用 Cocoa 数据绑定?
主要问题似乎是为了与 Cocoa 数据绑定交互,ViewModel 必须继承 NSObject 类、使用 Register 注释公开属性,并使用 WillChangeValue / DidChangeValue 方法通知观察者。我不知道如何为 PCL 中的 ViewModel 执行此操作,主要是因为如果这些相同的类要在 WPF 端使用,则不能继承 NSObject。
我想避免使用 MVVMCross 或 MVVMLight 等框架,因为它们包含了我不需要的许多内容。但是,如果没有其他办法,我愿意使用它们。
1个回答

1
讽刺的是...我在一年后遇到了你提到的同样的十字路口。我能够在不使用MVVMLight或MVVMCross的情况下完成这个任务。在我的ViewModelBase中,我使用SetProperty API首先检查值是否与其上一个值不同。如果不同,我使用MACOS编译器定义来调用WillChangeValue/DidChangeValue,然后为所有其他平台调用RaisePropertyChanged。显然,我使用MACOS编译器定义来子类化NSObject。我偶然发现了这篇stackoverflow文章,寻找一种将ICommand接口绑定到Xamarin.Mac按钮的方法。显然比我想象的要难。我想我可以查看MVVMCross存储库,以了解他们如何完成这项任务。无论如何,我相信你现在已经解决了你的多PCL-MVVM困境。如果你采取了不同于我的方法,请分享一下。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接