Привязка свойства viewmodel для просмотра свойства в коде с помощью Prism - PullRequest
0 голосов
/ 24 декабря 2018

Я использую C # 7, Prims 6.3 и SyncFusion Grid Control для разработки моего приложения (https://help.syncfusion.com/wpf/grid/getting-started).
Моя проблема заключается в следующем: Grid Control просто "эмулирует" стиль WPF, поэтому я могу добавить его в XAML: <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Grid.Row="0" CanContentScroll="True"> <syncfusion:GridControl x:Name="WorksheetGrid"/> </ScrollViewer>

Но я не могу связать его со своими свойствами viewmodel, которые содержат все данные для таблицы.
Поэтому я использовал EventAggregator для отправки новых данных для просмотра из viewmodel:

`

private void OnSelectWorksheetEvent(WorksheetSelectedEventArgs args) {
  _regionManager.RequestNavigate(RegionNames.RootRegion, "WorksheetView");
  _eventAggregator.GetEvent<WorksheetDataRecievedEvent>().
      Publish(new WorksheetDataEventArgs(_model.ReadRowHeader(args.WshCode),
      _model.ReadColHeader(args.WshCode), _model.ReadCells(args.WshCode)));
}

`

Но это уродливая архитектура, потому что я дублирую всю структуру данных в коде представления:

`

void OnWorksheetDataRecievedEvent(WorksheetDataEventArgs args) {
            WorksheetGrid.QueryCellInfo -= new GridQueryCellInfoEventHandler(gridControl_QueryCellInfo);

            ClearWorksheetData();
            ClearWorksheetModel();

            RowHeaderHelper.RowHeader = args.RowHeader;
            ColHeaderHelper.ColHeader = args.ColHeader;
            CellHelper.Cells = args.Cells;

            WorksheetGrid.Model.RowCount = RowHeaderHelper.HeaderSize() + 1;
            WorksheetGrid.Model.ColumnCount = ColHeaderHelper.HeaderSize() + 1;

            WorksheetGrid.QueryCellInfo += new GridQueryCellInfoEventHandler(gridControl_QueryCellInfo);
            WorksheetGrid.Model.ResizeRowsToFit(GridRangeInfo.Row(0), GridResizeToFitOptions.IncludeHeaders);
        }

`

Я понимаю, что прямой доступ к свойствам viewmodel из view является анти-mvvm, но я ограничен компонентом SyncFusion gui

Поэтому мои вопросы: 1. Как я могу получить доступ к свойствам viewmodel из view2. Как я могу вызвать некоторую функцию в коде представления при изменении свойства в viewmodel?

Спасибо.

1 Ответ

0 голосов
/ 24 декабря 2018

Прошло много времени с тех пор, как я использовал Prism (и да, ваше текущее решение очень анти-mvvm, и я бы посоветовал вам попробовать обернуть проблемные элементы управления), но я думаю, что для:

  1. В представлении this.DataContext должна быть модель представления.

  2. Я бы зарегистрировался на событие PropertyChanged в модели представления, чтобы получать обновления его значений (модели представленияобычно реализует интерфейс INotifyPropertyChanged).

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...