Как использовать подклассы NSTextField и NSTableCellView с ReactiveUI

В настоящее время я конвертирую SideBarDemo в C# и MonoMac в сочетании с ReactiveUI. У меня есть два подкласса NSTextField и NSTableCellView, которые являются представлениями для общего класса модели представления. Моя проблема в том, что я не знаю, как реализовать эти подклассы, чтобы работала привязка данных. Как выглядит хорошая реализация таких подклассов?

В следующем вы можете увидеть мое текущее состояние. Я знаю, что привязка, созданная в конструкторе, не будет работать, потому что ViewModel - обычное свойство. Однако я не мог понять, какие интерфейсы мне лучше всего реализовать.

[Register("MainCellView")]
public class MainCellView : NSTableCellView, IViewFor<TreeItemViewModel>
{
    public MainCellView ()
    {
        this.OneWayBind (ViewModel, x => x.Name, x => x.TextField.StringValue);
    }

    public MainCellView(IntPtr ptr) : base(ptr) { }

    public TreeItemViewModel ViewModel { get; set; }

    object IViewFor.ViewModel
    {
        get { return this.ViewModel; }
        set { this.ViewModel = (TreeItemViewModel)value; }
    }
}

[Register("HeaderCellView")]
public class HeaderCellView : NSTextField, IViewFor<TreeItemViewModel>
{
    public HeaderCellView () 
    {
        this.OneWayBind (ViewModel, x => x.Name, x => x.StringValue);
    }

    public HeaderCellView(IntPtr ptr) : base(ptr) { }

    TreeItemViewModel _vm;

    public TreeItemViewModel ViewModel { get; set }

    object IViewFor.ViewModel
    {
        get { return this.ViewModel; }
        set { this.ViewModel = (TreeItemViewModel)value; }
    }
}

Большое заранее,

Jens

1 ответ

Решение

Однако я не мог понять, какие интерфейсы мне лучше всего реализовать.

Если ReactiveUI не имеет встроенного подкласса, который помогает вам в классе, вы должны реализовать INotifyPropertyChanged для вашего класса, и сигнал, когда ViewModel меняется. Этого должно быть достаточно, чтобы работали привязки!

Другие вопросы по тегам