You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:57:03