将数据表绑定到 WPF 网格中的组合框
本文关键字:组合 网格 WPF 数据表 绑定 | 更新日期: 2023-09-27 18:36:27
这是我的 XAML 代码
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox Height="22" Name="MyCombobox"
ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=Page},Path=Data._cmbxData}"
DisplayMemberPath="Column1" SelectedValuePath="Column2"></ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
这是我的CS代码
DataTable _cmbxData = new DataTable();
_cmbxData.Columns.Add("Column1", typeof(int));
_cmbxData.Columns.Add("Column2", typeof(String));
_cmbxData.Rows.Add(new object[] { 1,"Value1"});
_cmbxData.Rows.Add(new object[] { 2, "Value2" });
_cmbxData.Rows.Add(new object[] { 3, "Value3" });
如何将此数据表绑定到我的 Xaml 中的组合框。 ??
谢谢大家
这应该有效:
假设:
dt - 数据表
我的窗口 - XAML 窗口名称
<Window
Name="myWindow"
...
Col_Name - 所需的列名
<ComboBox Name="MyComboBox" HorizontalAlignment="Left" Margin="181,55,0,0" Width="120" ItemsSource="{Binding Path=dt, ElementName=myWindow}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Label Content="{Binding Path=Col_Name}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
或者使用 RelativeSource
.
你的变量_cmbxData应该声明为窗口的属性,如下所示:
public DataTable CmbxData { get; set; }
然后,您的 DataGridTemplateColumn 应该引用此属性,您可以使用 RelativeSource 或通过命名窗口来访问其属性。
<Window x:Class="SO1.UI.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
x:Name="mainPage">
<Grid>
<DataGrid x:Name="dataGridTest">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Test">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="Test" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox Height="22" Name="MyCombobox"
ItemsSource="{Binding ElementName=mainPage , Path=CmbxData}"
DisplayMemberPath="Column1" SelectedValuePath="Column2"> </ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
当然,您需要将数据网格与源绑定...例如,这是我要测试的代码隐藏:
public partial class MainWindow : Window
{
public DataTable CmbxData { get; set; }
public IList<string> Test { get; set; }
public MainWindow()
{
InitializeComponent();
CmbxData = new DataTable();
CmbxData.Columns.Add("Column1", typeof(int));
CmbxData.Columns.Add("Column2", typeof(String));
CmbxData.Rows.Add(new object[] { 1, "Value1" });
CmbxData.Rows.Add(new object[] { 2, "Value2" });
CmbxData.Rows.Add(new object[] { 3, "Value3" });
this.Test = new List<string>();
this.Test.Add("Test 1");
this.dataGridTest.ItemsSource = this.Test;
}
}