WPF DataGrid.DataGridComboBoxColumn 数据绑定 可用自由示例

尝试了一些教程,不好使。手写一个比较自由的示例:

先上效果图:(不知道怎么多了一行,欢迎指教// 感谢@hyxlfd, 添加这个就好了:CanUserAddRows="False")

项目里使用了两套绑定系统;

  • 一套通过‘ObjectDataProvider’绑定静态数据;
  • 另一套通过‘ItemsSource’属性绑定动态数据。

静态数据绑定步骤:

  1. 在后端准备数据提供类。需要有一个普通函数返回一个数组。
  2. 在前端,准备一个‘ObjectDataProvider’标签。绑定数据类,设置名字。
  3. 在前端表格控件中,通过下拉框列的ItemSource属性,通过名字绑定‘ObjectDataProvider’标签。

动态绑定步骤:

  1. 在后端,准备一个类。表格中每一列都能对于该类中一个公开成员。
  2. 在后端,填充数据后,将数据列表赋值给表格的”DataContext“属性。
  3. 在前端,1是”ItemsSource="{Binding}"”指明使用数据绑定;2是设置第一列下拉框选中项的绑定属性。绑定到“ItemText”成员上。

前端代码(mainwindow.xaml):

<Grid>
    <Grid.Resources>
        <!--静态绑定:创建静态数据提供者。数据由‘local’命名空间的‘DataProviderClass’类的‘GetList’方法提供。 Create list of enumeration values-->
        <ObjectDataProvider x:Key="ItemList" 
            ObjectType="{x:Type local:DataProviderClass}" 
        MethodName="GetList"/>
    </Grid.Resources>
    <!-- 动态绑定:ItemsSource="{Binding}" 指明使用数据绑定功能  然后,通过SelectedItemBinding 将当前项绑定到数据类的ItemText成员上。 -->
    <DataGrid Name="DG1" ItemsSource="{Binding}" AutoGenerateColumns="False" CanUserAddRows="False">
        <DataGrid.Columns>
            <!--静态绑定:通过ItemsSource 绑定到数据提供者,-->
            <DataGridComboBoxColumn Header="下拉框测试"
                SelectedItemBinding="{Binding ItemText}" 
                ItemsSource="{Binding Source={StaticResource ItemList}}">
            </DataGridComboBoxColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

逻辑代码(mainwindwo.xaml.cs):

namespace DataBingTest
{
    /// <summary>
    /// DB_DataGrid.xaml 的交互逻辑
    /// </summary>
    public partial class DB_DataGrid : Window
    {
        public DB_DataGrid()
        {
            InitializeComponent();
                    // 创建示例数据
            List<RowItem> rowList = new List<RowItem>()
            {
                new RowItem() { ItemText = "第一项" },
                new RowItem() { ItemText = "第二项" },
                new RowItem() { ItemText = "第三项" }
            };
        
            // 为表格控件的数据源添加动态内容
            DG1.DataContext = rowList;
        }
    }
    // 提供动态数据的类,每一行绑定到这类的一个实例
    public class RowItem
    {
        public string? ItemText { get; set; }
    }

    // 提供静态数据的类。
    public class DataProviderClass
    {
        static string[] ItemList = new string[] { "第一项", "第二项", "第三项" };

        public string[] GetList()
        {
            return DataProviderClass.ItemList;
        }
    }
}

参考:

1 微软教程:https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.datagridcomboboxcolumn?redirectedfrom=MSDN&view=netframework-4.7.2

WPF DataGridComboBoxColumn使用(绝对良心版)_datagrid 绑定combox-CSDN博客

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值