我基於WPF的DataGrid開發WPF用戶控件,支持動態列生成與我們自己的業務基於上下文菜單。WPF的DataGrid的ItemSource刷新 - GridColumns顯示奇怪的行爲
我產生了依賴屬性調用數據源,當我設置數據源調用自定義的方法綁定我的數據源動態創建列和設置的ItemSource屬性。所有的第一次都很好。我有一個名爲刷新的上下文菜單,當用戶單擊刷新時,SQL將執行並且上述操作的相同信息將會發生。在第二次,行和列完美創建。但是,當我做水平滾動列標題不能正常顯示,它在滾動時失去其視覺狀態。
我的自定義屬性 - 數據源
這是調用每次public static DependencyProperty DataSourceProperty =
DependencyProperty.Register("DataSource", typeof(GridDataModel), typeof(MyGridView),
new PropertyMetadata((dependencyObject, eventArgs) =>
{
if (eventArgs.OldValue != null)
{
((GridDataModel)eventArgs.OldValue).Dispose();
}
BindToDataSource((MyGridView)dependencyObject, (GridDataModel)eventArgs.NewValue);
}));
我的自定義方法我設置DataSource屬性:
private static void BindToDataSource(MyGridView view, GridDataModel dataModel)
{
if (view.ViewModel != null)
{
BindingOperations.ClearAllBindings(view.GridView);
view.GridView.Items.Clear();
view.GridView.Columns.Clear();
view.GridView.ItemsSource = null;
view.ViewModel.Dispose();
}
view.ViewModel = new MyGridViewModel(dataModel);
view.ViewModel.PrepareGridView();
view.LayoutRoot.DataContext = view.ViewModel;
view.CreateColumns();
view.GridView.SetBinding(DataGrid.ItemsSourceProperty, new Binding("DisplayRows"));
}
下面的代碼我用來在刷新菜單調用點擊:
private void OnRefreshClick(object sender, RoutedEventArgs e)
{
var data = new TestDataAccess();
DataSource = data.MakeGridModel("select Top 200 * from ApplicationUSer"); //Assigning DataSource Again, which will call the above method.
GridView.UpdateLayout();
}
所附的圖像可以幫助理解這個問題,刷新後,你可以看到在做水平滾動時列對齊去陌生。需要幫助解決這個奇怪的問題。
嘗試使用GridColumnWidth = 0,並重新設置爲自動,嘗試GridView.UpdateLayout(), ![在這裏輸入的形象描述] [1]