使用Prism

时间:2018-12-24 09:00:39

标签: c# wpf prism grid-layout syncfusion

我使用C#7,Prims 6.3和SyncFusion网格控件来开发应用程序(https://help.syncfusion.com/wpf/grid/getting-started)。
接下来的问题是:网格控件只是“模仿” 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属性是反mvvm的,但限于SyncFusion gui组件

所以我的问题是: 1.如何从后面的视图代码访问viewmodel的属性? 2.更改viewmodel的属性后,如何在视图代码中触发某些功能?

谢谢。

1 个答案:

答案 0 :(得分:1)

自从我使用Prism以来已经有一段时间了(是的,您当前的解决方案是非常抗mvvm的,我建议您尝试包装有问题的控件),但是我认为这适用于:

  1. 在视图this.DataContext中应为视图模型。

  2. 我将在视图模型中注册PropertyChanged事件以获取其值的更新(视图模型通常实现INotifyPropertyChanged接口)。

希望有帮助!

相关问题