Подтвердить что ты не робот

WPOB-привязка к спискам <string>

У меня возникло трудное время, чтобы связать мое свойство, которое имеет тип List, в моем поле со списком через XAML.

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

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

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

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

cboDomainNames.ItemsSource = MyProperty;

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

4b9b3361

Ответ 1

Объявление моего комментария, чтобы отметить ответ.

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

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

Ответ 2

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

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

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

Ответ 3

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

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

ItemsSource="{Binding Path=MyProperty, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"