WPF Databinding комбинированный список к списку <string> - PullRequest
14 голосов
/ 28 июля 2011

Мне трудно связать мое свойство типа List с моим списком через XAML.

public List<string> MyProperty  { get; set; }

Следующее связывание XAML не работает:

<ComboBox Name="cboDomainNames" ItemsSource="{Binding Path=MyProperty}"/> 

Но следующее назначение:

cboDomainNames.ItemsSource = MyProperty;

отлично работает.Что мне здесь не хватает?

Ответы [ 3 ]

8 голосов
/ 02 августа 2011

Отправка моего комментария обратно для пометки ответа.

Мой DataContext был установлен, НО он был установлен после InitializeComponent ().Я думал, что это может быть проблемой.Затем я понял, что при привязке через xaml при загрузке представления привязка происходит к пустому свойству.

Свойство заполняется, когда представление готово после загрузки (т. Е. В _presenter.OnViewReady()).Так как это не наблюдаемая коллекция, в комбинированный список ничего не добавляется.Определение его из моего кода работает, потому что в то время данные существуют в свойстве.

7 голосов
/ 28 июля 2011

Предположим, у вас есть List<Foo> с именем Foos в вашем окне / странице.Foo имеет свойство Name.Теперь вы устанавливаете привязку в XAML следующим образом:

<ComboBox ItemsSource="{Binding Path=Foos}"
DisplayMemberPath="Name"
SelectedValuePath="Name"
SelectedValue="{Binding Path=Foo}"
/>

Это основано на этом вопросе SO . Прочтите это (обзор привязки данных WPF) как хорошую основу для привязки данных в WPF.

0 голосов
/ 28 июля 2011

Если вы не укажете ничего, кроме пути, привязка предполагает в качестве источника контейнер DataContext.Кстати, полезное свойство определено для контейнера (например, окна).

Вы можете решить его следующим образом (в xaml):

ItemsSource="{Binding Path=MyProperty, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...