Best practices for Xamarin.Mac MVVM pattern

六月ゝ 毕业季﹏ 提交于 2021-01-27 12:52:11

问题


I'm developing a WPF desktop application that I'd also like to run on Mac via Xamarin.Mac. I've taken great care to separate as much core code as possible into a PCL, and keep the WPF-specific code as thin as possible.

The UI architecture is MVVM. All of my viewmodels, implementing INotifyPropertyChanged, in are in my core PCL. The WPF UI components can then directly bind to those viewmodel properties.

My question is: how can I use my "portable" PCL viewmodels from the Xamarin.Mac side so that I can use Cocoa databinding?

The main problem appears to be that, in order to interact with Cocoa databindings, the viewmodels must inherit from NSObject, use the Register annotation to expose the properties, and use the WillChangeValue/DidChangeValue methods for notifying observers. I don't see a way to do this for the viewmodels inside the PCL, mainly because I can't have them inherit from NSObject if those same classes are to remain usable from the WPF side.

I'd like to avoid using frameworks such as MVVMCross or MVVMLight because they contain a lot of things that I don't need. However, if there's no other way I'm open to using them.


回答1:


The irony.... I'm at the same crossroads you've mentioned almost a year later. I was able to accomplish this without using MVVMLight or MVVMCross.

In my ViewModelBase, I used the SetProperty API to inspect first to see if the value is different from it's previous value. If it is different, I use the MACOS complier definition to invoke WillChangeValue/DidChangeValue accordingly, followed by the RaisePropertyChanged for all other platforms. Obviously I used the MACOS compiler def to subclass NSObject.

I came upon this stackoverflow post looking for a way to bind the ICommand interface to a Xamarin.Mac button. Apparently it's harder than I thought.

I suppose I could peek at the MVVMCross repository to see how they've accomplished this task. Anyway, I'm sure by now you've solved your multi-pcl-MVVM dilemma. Do share if you've done anything different than my approach.



来源:https://stackoverflow.com/questions/43259540/best-practices-for-xamarin-mac-mvvm-pattern

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!