尝试了一些教程,不好使。手写一个比较自由的示例:
先上效果图:(不知道怎么多了一行,欢迎指教// 感谢@hyxlfd, 添加这个就好了:CanUserAddRows="False")
项目里使用了两套绑定系统;
- 一套通过‘ObjectDataProvider’绑定静态数据;
- 另一套通过‘ItemsSource’属性绑定动态数据。
静态数据绑定步骤:
- 在后端准备数据提供类。需要有一个普通函数返回一个数组。
- 在前端,准备一个‘ObjectDataProvider’标签。绑定数据类,设置名字。
- 在前端表格控件中,通过下拉框列的ItemSource属性,通过名字绑定‘ObjectDataProvider’标签。
动态绑定步骤:
- 在后端,准备一个类。表格中每一列都能对于该类中一个公开成员。
- 在后端,填充数据后,将数据列表赋值给表格的”DataContext“属性。
- 在前端,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;
}
}
}
参考:
2 WPF DataGridComboBoxColumn使用(绝对良心版)_datagrid 绑定combox-CSDN博客