2008-11-22 3 views
8

Я уже несколько секунд стучаю в эту голову. Я не уверен, почему он не работает. Я все еще довольно новичок в этом бизнесе WPF.WPF Binding Collection To ComboBox и выбор элемента

Вот мой XAML для комбобоксе

<ComboBox 
    SelectedValuePath="Type.FullName" 
    SelectedItem="{Binding Path=Type}" 
    Name="cmoBox" /> 

Вот что населяет ComboBox (MyAssembly класс я создал список возможных типов)

cmoBox.ItemsSource = myAssembly.PossibleTypes; 

Я установить DataContext в родительском элемент ComboBox в коде, подобном этому:

groupBox.DataContext = listBox.SelectedItem; 

Я хочу связывать g, чтобы выбрать правильный «возможный тип» из поля со списком. Он ничего не выбирает. Я попробовал SelectedValue и SelectedItem. Когда я изменил DisplayMemberPath из ComboBox на другое свойство, он изменил то, что было отображено, поэтому я знаю, что он не полностью сломан.

Любые идеи ???

ответ

11

В XAML установите ItemsSource="{Binding}" и (в коде позади) установите DataContext на myAssembly.PossibleTypes.

+0

Работал отлично! Спасибо –

+0

:) Я не тестировал его ... но я недавно попадал в WPF (из-за использования его на работе) ... Я полагал, что это было либо на 100% правильно, либо на выходе. –

12

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

<UserControl 
    x:Class="MyNamespace.MyControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    DataContext="{Binding}"> 

    <ComboBox 
    Width="200" 
    ItemsSource="{Binding Path=myAssembly.PossibleTypes}" 
    SelectedValuePath="Type.FullName" 
    SelectedItem="{Binding Path=Type}" 
    Name="cmoBox" /> 
</UserControl> 

Это может быть просто личные предпочтения, но я думаю, что лучше практика, чтобы иметь привязки данных в xaml, поскольку он упрощает просмотр того, к чему привязан каждый элемент управления, без необходимости перебирать код. Кроме того, если вы хотите ссылаться на свой ComboBox из кода, вы должны назначить ему свойство x: Name в xaml, а не просто Name.

-5

Я согласен: привязки должны быть в XAML. Я поставил ... проверяя .. ничего в коде позади, никогда. Источники данных - все это повторно используемые «ресурсы».

(ну, ОК, конструктор кода-кода вызывает InitializeComponent()).

+1

Вы вообще не ответили на этот вопрос. Вы добавили ничего, кроме своего неуместного предпочтения, чтобы не использовать код позади. Кроме того, на этот вопрос уже ответили правильно за 18 месяцев до того, как был отправлен ваш ответ. По этим причинам -1. – Sheridan

+0

@Sheridan: +1 для комментариев, почему дается отрицательная точка. –