Коллекция привязки WPF к ComboBox и выбор элемента - PullRequest
8 голосов
/ 22 ноября 2008

Я уже некоторое время стучу головой об это. Я не совсем уверен, почему это не работает. Я все еще новичок во всем этом бизнесе WPF.

Вот мой XAML для выпадающего списка

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

Вот что заполняет ComboBox (myAssembly - это класс, который я создал со списком возможных типов)

cmoBox.ItemsSource = myAssembly.PossibleTypes;

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

groupBox.DataContext = listBox.SelectedItem;

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

Есть идеи ???

Ответы [ 3 ]

12 голосов
/ 08 декабря 2009

Вы также можете установить привязку в 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.

11 голосов
/ 22 ноября 2008

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

0 голосов
/ 01 апреля 2010

Я согласен: привязки должны быть в XAML. Я помещаю ... проверяю .. вообще ничего в коде позади, никогда. Все источники данных являются повторно используемыми "ресурсами".

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...