【问题标题】:Binding viewmodel property to view property in code behind using Prism使用 Prism 将视图模型属性绑定到代码中的视图属性
【发布时间】:2018-12-24 09:00:39
【问题描述】:

我使用 C# 7、Prims 6.3 和 SyncFusion Grid Control 来开发我的应用程序 (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>

但我无法将它与包含表格所有数据的视图模型属性绑定。
所以我使用 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);
        }

`

我知道从视图直接访问视图模型属性是反 mvvm,但我受限于 SyncFusion gui 组件

所以我的问题: 1. 如何从后面的视图代码中访问视图模型的属性? 2. viewmodel的属性发生变化时,如何触发view code后面的一些函数?

谢谢。

【问题讨论】:

标签: c# wpf prism grid-layout syncfusion


【解决方案1】:

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

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

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

希望对你有帮助!

【讨论】:

  • Itay,谢谢。关于 DataContext,您完全正确。我很愚蠢。
  • 你关于包装“坏”gui元素的想法也很有趣。
猜你喜欢
  • 2010-12-02
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
相关资源
最近更新 更多