Как я устанавливаю DataTable, чтобы быть ItemsSource DataGridComboBoxColum? - PullRequest
2 голосов
/ 29 марта 2011

У меня есть DataTable с двумя столбцами, которые я буду связывать со всеми ComboBoxами DataGridComboBoxColumn, где один из столбцов будет текстом элементов, а другой - значениями элементов.

Я знаю, что свойство 'DisplayMemberPath' - это то, где я указываю Имя столбца, который должен быть текстом Элементов, и значениям, которые должны быть указаны в свойстве SelectedValuePath.

Но еще раз проблема связать что-либо с DataGridComboBoxColumn, потому что он не может получить доступ к DataContext DataGrid.

Итак, как мне установить DataTable в качестве ItemsSource для DataGridComboBoxColum?

Пример, где то, что я хочу, работает в коде:

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>

Вот мой код. Позади кода:

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

    private static DataTable dt;

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

1 Ответ

3 голосов
/ 30 марта 2011

Либо,
A. Расширение задает DataContext ComboBox для вашей DataTable, ИЛИ
B. Если DataTable является какой-то частью объекта, который вы привязали к DataGrid, используйте RelativeSource в ComboBoxсвязывание.

Вам потребуется опубликовать свой код, если вам нужна конкретная помощь для этих сценариев.

...