如何在C#代码后台为DataGrid赋值ItemsSource 无需在XAML中配置绑定
完全可以省去XAML中的ItemsSource="{Binding Path=LoadDataBindingBasket}"声明,直接在C#代码中动态赋值实现多场景数据源切换,实现方式如下:
第一步:简化XAML声明
移除ItemsSource绑定属性即可,其余配置保留:
<DataGrid x:Name="dataGridBasket" Width="270" AutoGenerateColumns="True" HorizontalAlignment="Left" Margin="10,5,0,10" />
第二步:C#代码直接赋值ItemsSource
不需要再设置DataContext,查询得到数据后直接给DataGrid的ItemsSource属性赋值即可,表名完全可以自定义不需要固定:
DataSet dataSetBespokeBasket = new DataSet(); MySqlDataAdapter adp = new MySqlDataAdapter(mySqlCommand); adp.Fill(dataSetBespokeBasket, "自定义表名"); // 表名可根据场景随意修改,无固定限制 // 直接绑定指定表的视图,不需要设置DataContext dataGridBasket.ItemsSource = dataSetBespokeBasket.Tables["自定义表名"].DefaultView;
动态切换数据源实现
不同场景需要切换数据源时,直接重新给ItemsSource赋值即可:
// 场景1:加载购物车数据 private void LoadBasketData() { // 购物车查询逻辑 DataSet ds = new DataSet(); MySqlDataAdapter adp = new MySqlDataAdapter(basketQueryCommand); adp.Fill(ds, "Basket"); dataGridBasket.ItemsSource = ds.Tables["Basket"].DefaultView; } // 场景2:加载收藏夹数据 private void LoadFavoriteData() { // 收藏夹查询逻辑 DataSet ds = new DataSet(); MySqlDataAdapter adp = new MySqlDataAdapter(favoriteQueryCommand); adp.Fill(ds, "Favorite"); dataGridBasket.ItemsSource = ds.Tables["Favorite"].DefaultView; }
注意事项
- 如果你保留了XAML中的
ItemsSource绑定,后台代码对ItemsSource的赋值也会覆盖XAML绑定的效果,WPF中代码后台对依赖属性的赋值优先级高于XAML声明的绑定。 - 如果不需要自动生成列,可将
AutoGenerateColumns设为False,在XAML中预先定义固定列,避免切换数据源时出现列闪烁的问题。
内容的提问来源于stack exchange,提问作者jgriffo1
相关产品推荐
相关产品推荐

