![](/img/trans.png)
[英]What am I doing wrong in this binding of a dependency property in the code behind (of a view) to a property its viewmodel?
[英]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 )。
接下來的問題是:網格控件只是“模擬” 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中的屬性時,如何在后面的視圖代碼中觸發某些功能?
謝謝。
自從我使用Prism以來已經有一段時間了(是的,您當前的解決方案是非常抗mvvm的,我建議您嘗試包裝有問題的控件),但是我認為這適用於:
在視圖中, this.DataContext
應該是視圖模型。
我將在視圖模型中注冊PropertyChanged
事件以獲取其值的更新(視圖模型通常實現INotifyPropertyChanged
接口)。
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.