【问题标题】:Best practices for Xamarin.Mac MVVM patternXamarin.Mac MVVM 模式的最佳实践
【发布时间】:2017-09-01 17:47:42
【问题描述】:

我正在开发一个我也想在其上运行的 WPF 桌面应用程序 Mac 通过 Xamarin.Mac。我非常注意分离尽可能多的核心 尽可能将代码写入 PCL,并使特定于 WPF 的代码保持精简 尽可能。

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

我的问题是:如何使用我的“便携” Xamarin.Mac 端的 PCL 视图模型,以便我可以使用 Cocoa 数据绑定?

主要问题似乎是,为了与 Cocoa 交互 数据绑定,视图模型必须继承自NSObject,使用 Register 注解暴露属性,并使用 WillChangeValue/DidChangeValue 通知观察者的方法。一世 看不到为 PCL 中的视图模型执行此操作的方法,主要是 因为如果那些相同的类,我不能让它们从 NSObject 继承 从 WPF 端保持可用。

我想避免使用诸如 MVVMCross 或 MVVMLight 之类的框架,因为它们包含很多我不需要的东西。但是,如果没有其他方法,我愿意使用它们。

【问题讨论】:

    标签: c# cocoa xamarin mvvm data-binding


    【解决方案1】:

    具有讽刺意味的是.... 差不多一年后,我正处于你提到的同一个十字路口。 我能够在不使用 MVVMLight 或 MVVMCross 的情况下完成此操作。

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

    我发现这篇 stackoverflow 帖子正在寻找一种将 ICommand 接口绑定到 Xamarin.Mac 按钮的方法。显然比我想象的要难。

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

    【讨论】:

      猜你喜欢
      • 2019-04-26
      • 2012-08-19
      • 2017-03-21
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 2011-02-14
      相关资源
      最近更新 更多