使用 Prism 在后台代码中绑定视图模型 属性 以查看 属性
Binding viewmodel property to view property in code behind using Prism
我使用 C# 7、Prims 6.3 和 SyncFusion Grid Control 开发我的应用程序 (https://help.syncfusion.com/wpf/grid/getting-started)。
我的下一个问题是:网格控件只是 "emulate" WPF 样式,所以我可以将它添加到 XAML 中:
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Grid.Row="0" CanContentScroll="True">
<syncfusion:GridControl x:Name="WorksheetGrid"/>
</ScrollViewer>
但我无法将其与包含 table.
所有数据的视图模型属性绑定
所以我使用 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后面的代码中触发一些函数?
谢谢。
自从我使用 Prism 以来已经有一段时间了(是的,您当前的解决方案非常反 mvvm,我建议您尝试包装有问题的控件),但我认为:
在视图中this.DataContext
应该是视图模型。
我会在视图模型中注册 PropertyChanged
事件以获取其值的更新(视图模型通常实现 INotifyPropertyChanged
接口)。
希望对您有所帮助!
我使用 C# 7、Prims 6.3 和 SyncFusion Grid Control 开发我的应用程序 (https://help.syncfusion.com/wpf/grid/getting-started)。
我的下一个问题是:网格控件只是 "emulate" WPF 样式,所以我可以将它添加到 XAML 中:
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Grid.Row="0" CanContentScroll="True">
<syncfusion:GridControl x:Name="WorksheetGrid"/>
</ScrollViewer>
但我无法将其与包含 table.
所有数据的视图模型属性绑定
所以我使用 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后面的代码中触发一些函数?
谢谢。
自从我使用 Prism 以来已经有一段时间了(是的,您当前的解决方案非常反 mvvm,我建议您尝试包装有问题的控件),但我认为:
在视图中
this.DataContext
应该是视图模型。我会在视图模型中注册
PropertyChanged
事件以获取其值的更新(视图模型通常实现INotifyPropertyChanged
接口)。
希望对您有所帮助!