我如何将DataTable设置为DataGridComboBoxColum的ItemsSource?

时间:2011-03-29 19:47:47

标签: wpf binding wpfdatagrid

我有一个带有两个Columns的DataTable,它将绑定到DataGridComboBoxColumn的所有ComboBox,其中一个列将是Items的Text,另一个将是Items的值。

我知道名为'DisplayMemberPath'的属性是指定列的名称为Item的文本,以及必须在'SelectedValuePath'属性中指定的值。

但是再次将DataGridComboBoxColumn绑定到什么是一个问题,因为它无法访问DataGrid的DataContext。

那么我如何将DataTable设置为DataGridComboBoxColum的ItemsSource?

我希望在Code Behind中使用的示例:

TestClass test = new TestClass();

dataGrid.Columns.Add(new DataGridComboBoxColumn()
{
    Header = "City",
    DisplayMemberPath = "Cities",
    SelectedValuePath = "ID",
    ItemsSource = test.Dt.DefaultView,
});

这是我的XAML代码:

<Window x:Class="WpfApp3.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApp3
    Title="MainWindow" Height="350" Width="600">

    <Grid Name="grid1">
        <DataGrid Name="dataGrid" AutoGenerateColumns="False" MinColumnWidth="100">
            <DataGrid.Columns>
                <DataGridComboBoxColumn Header="City" DisplayMemberPath="Cities" SelectedValuePath="ID" ItemsSource="{Binding local:TestClass.Dt}"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

这是我的Code Behind代码:

public class TestClass
{
    public TestClass()
    {
        (...)
        //Here i am loading my DataTable
    }

    private static DataTable dt;

    public static DataTable Dt
    {
        get { return dt; }
    }
}

1 个答案:

答案 0 :(得分:3)

无论哪种,
A.exlicity将ComboBox的DataContext设置为您的DataTable,OR
B.如果DataTable是绑定到DataGrid的对象的某个部分,请在ComboBox绑定中使用RelativeSource

如果您需要针对这些方案的特定帮助,则需要发布代码。