2010-02-08 4 views
4

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

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; 
     } 
    } 
} 

unnessecary вероятно, но здесь класс лиц:

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#:

Пакеты то же самое.

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

В конечном счете мне нужно привязать 2 пути, где двойной щелчок на столбце firstname вызывает поле comobo, в котором затем хранятся варианты всех возможных первых имен в коллекции (например, George, Jim and Amy).

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

+0

Я подозреваю, что читаю это: http: // blogs.msdn.com/vinsibal/archive/2008/10/31/wpf-datagrid-datagridcomboboxcolumn-v1-intro.aspx - вот где проблема лежит. Мне нужно установить SelectedItemBinding в XAML, но поскольку мой список определен в коде, как мне это сделать? Нет, я не хочу устанавливать его в XAML, потому что другая часть этого приложения позволяет добавлять объекты людей, поэтому список меняется. – baron

ответ

1

Я просто хотел указать вам на один из лучших ссылки, когда речь идет о WPF Toolkit Datagrid, это происходит из from Samuel Moura я скачал 15 образцов и держать их под рукой, я даю вам ссылку, потому что вы найдете столбец Datagrid более полезным, чем любая ссылка, чем я могу дать вам быстрый ответ.

+0

@Enrique: Ваш вопрос XamlWriter был удален, прежде чем я смог ответить на него. Предположительно, вы обнаружили, что проблема заключалась в том, что Concept (очевидно, объект data или ViewModel) имел указатель на UserControl, поэтому вы в итоге рекурсивно пытались сериализовать цикл. Я хотел бы упомянуть об этом, но я также хотел упомянуть, что тот факт, что у вас есть поле «ConceptAnswerUserControl» в вашем объекте «Концепция», говорит о том, что ваши данные и слои пользовательского интерфейса слабо разделены. У ваших данных (или ViewModel) никогда не должно быть указателя на UIElement любого типа. Это приводит ко всем видам проблем. (продолжение ...) –

+0

(продолжение) Например, если вы хотите отобразить и отредактировать одну и ту же концепцию в двух местах - тогда для вашей концепции будет два UserControls. Я настоятельно рекомендую вам вернуться и переосмыслить, как вы создали свой слой данных (или модель представления), и привязку интерфейса к нему. Выясните, как вообще сохранить слой данных от ссылки на пользовательский интерфейс, и у вас будет лучший дизайн. –

+0

@Ray Burns На самом деле у меня все еще есть проблема, Concept - это чистые данные и, не содержит ссылок на пользовательский интерфейс; в ConceptAnswerUserControl мы хотим сохранить какие-то метаданные, которые сообщают стороне клиента, как должен выглядеть визуальный рендеринг «концепции», при создании «концепции» автор (деловые люди) может выбрать способ его отображения, например ConceptAnswerUserControl.ConceptAnswerType может быть «YesNo» или «Text_Single» «Text_Multiple», так или иначе, все, что еще находится в разработке и исследует подходы к одному из них - рендеринг WPF - это то, где я получаю эту ошибку. –

1

сетке данных должен иметь набор в 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 doesn't work.

Однако, было создано обход для Using combo boxes with the WPF DataGrid. Наконец, вы можете взглянуть на статью More fun with DataGrid Маргарет Парсонс.

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

Посмотрите на это так, пост, который, как представляется, решить эту проблему: Problem binding DataGridComboBoxColumn.ItemsSource

+0

Это не работает. Я получаю то же, что и раньше, за исключением того, что у них теперь есть заголовки. Это правильное количество строк, но пустое и двойное нажатие вызывает comobobox, но это также пустое. – baron

+0

См. Редактирование для ссылки на другое сообщение SO, которое должно решить проблему. –

+0

Можете ли вы показать мне, как я адаптирую свою проблему к решению в этом вопросе? Поскольку я установил ItemSource в код позади, он делает это в xaml – baron

Смежные вопросы