私たち自身のビジネスベースのコンテキストメニューで動的列生成をサポートするために、WPF DataGridに基づいてWPF UserControlを開発しています。WPF DataGrid ItemSource Refresh - GridColumnsが奇妙な動作を示す
カスタムメソッドを呼び出すDataSourceを設定して、DataSourceをバインドして、オンザフライで列を作成し、ItemSourceプロパティを設定すると、DataSourceというDependency Propertyが作成されました。最初はすべて正常に動作します。私はリフレッシュと呼ばれるコンテキストメニューを持っていますが、ユーザーがRefreshをクリックするとSQLが実行され、前述のアクションの同じ項目が発生します。 2回目は、行と列が完全に作成されます。しかし、私は横のスクロールを行うときに、列のヘッダーが正しく表示されていない、その視界の状態をスクロールしながら失われます。
マイカスタムプロパティ - データソース
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]