Я использую 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?
Спасибо.