Привязка к DataGridComboBoxColumn из коллекции

Пытаясь выполнить привязку к коллекции в WPF, я получил следующие результаты:

XAML:

<toolkit:DataGrid Name="dgPeoples"/>

CS:

namespace DataGrid
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1
    {
        private readonly ObservableCollection<Person> personList = new ObservableCollection<Person>();

        public Window1()
        {
            InitializeComponent();

            personList.Add(new Person("George", "Jung"));
            personList.Add(new Person("Jim", "Jefferson"));
            personList.Add(new Person("Amy", "Smith"));

            dgPeoples.ItemsSource = personList;
        }
    }
}

вероятно, небезопасно, но вот класс Person:

namespace DataGrid
{
    public class Person
    {
        public string fName { get; set; }
        public string lName { get; set; }

        public Person(string firstName, string lastName)
        {
            fName = firstName;
            lName = lastName;
        }
    }
}

Но что мне действительно нужно, так это это в DataGridComboBoxColumn. Вот мои исправления:

XAML:

<toolkit:DataGrid Name="dgPeoples" Grid.Row="0" AutoGenerateColumns="False">
    <toolkit:DataGrid.Columns>
        <toolkit:DataGridComboBoxColumn Width="5*"/>
        <toolkit:DataGridComboBoxColumn Width="5*"/>
    </toolkit:DataGrid.Columns>
</toolkit:DataGrid>

C#:

Остается прежним.

Проблема теперь в том, что я получаю пустые столбцы со списком! Есть идеи, как я могу заставить это работать?

В конечном итоге мне нужна двухсторонняя привязка, где двойной щелчок по столбцу firstname вызывает поле со списком, которое затем содержит параметры всех возможных имен в коллекции (например, Джордж, Джим и Эми).

Благодарен за любую помощь!


person baron    schedule 08.02.2010    source источник
comment
Я подозреваю, что прочитал это: blogs.msdn.com/vinsibal/archive/2008/10/31/ - вот в чем проблема. Мне нужно установить SelectedItemBinding в XAML, но, поскольку мой список определен в коде, как мне это сделать? Нет, я не хочу устанавливать его в XAML, потому что другая часть этого приложения позволяет добавлять объекты людей, поэтому список постоянно меняется.   -  person baron    schedule 09.02.2010


Ответы (1)


Для DataGrid должны быть установлены свойства Header и ItemsSource:

<toolkit:DataGrid Name="dgPeoples" Grid.Row="0" AutoGenerateColumns="False">
    <toolkit:DataGrid.Columns>
        <toolkit:DataGridComboBoxColumn Width="5*"
            Header="First Name"
            ItemsSource="{Binding Path=fName}"/>
        <toolkit:DataGridComboBoxColumn Width="5*"
            Header="First Name"
            ItemsSource="{Binding Path=lName}"/>
    </toolkit:DataGrid.Columns>
</toolkit:DataGrid>

Похоже, что в одном из выпусков набора инструментов возникла проблема при использовании DataGridComboBoxColumn.ItemsSource: DataGridComboBoxColumn.ItemsSource не работает.

Однако для Использование полей со списком с WPF DataGrid. Наконец, вы можете взглянуть на статью Еще больше удовольствия от DataGrid Маргарет Парсонс.

Изменить
Теперь я не уверен, что приведенный выше код работает. Я сделал это по памяти и сослался на другие ссылки как на ресурсы.

Взгляните на это сообщение SO, которое, похоже, решает эту проблему: Проблема с привязкой DataGridComboBoxColumn.ItemsSource

person Metro Smurf    schedule 08.02.2010
comment
Это не работает. Я получаю то же самое, что и раньше, за исключением того, что теперь у них есть заголовки. Это правильное количество строк, но оно пустое, и двойной щелчок вызывает поле со списком, но оно также пустое. - person baron; 09.02.2010
comment
См. Редактирование для ссылки на другие сообщения SO, которые должны решить проблему. - person Metro Smurf; 09.02.2010
comment
Не могли бы вы помочь мне показать, как я могу адаптировать свою проблему к решению в этом вопросе SO? Поскольку я установил ItemsSource в коде позади, он делает это в xaml - person baron; 09.02.2010