WPF привязка данных в XAML - PullRequest
       23

WPF привязка данных в XAML

2 голосов
/ 24 февраля 2009

У меня небольшая проблема с привязкой данных в моем текущем проекте. У меня есть коллекция ObservableCollection, которую я хочу привязать к ListBox.

public ObservableCollection<GeoDataContainer> geoList = new ObservableCollection<GeoDataContainer>();

... позже ...

geoListBox.ItemsSource = geoList;

Этот код работает нормально. В списке есть табличка с данными, и все выглядит идеально.

Но я не хочу использовать код C # для привязки. Я хочу сделать привязку в коде XAML. Я ищу дни, но не понимаю. Это двухстрочный код C #, но заархивировать его в XAML кажется невозможным без создания собственного класса для моей коллекции или добавления DataProvider или ресурсов или чего-либо еще.

Нет ли простого способа сделать это?

Ответы [ 3 ]

4 голосов
/ 24 февраля 2009

Все, что вам нужно сделать, это открыть коллекцию и связать ее. Например, если вы выставите его как:

public ICollection<GeoDataContainer> GeoList
{
    get { return geoList; }
}

Вы сможете привязать его как:

<ListBox ItemsSource="{Binding GeoList}"/>

«Хитрость» заключается в том, чтобы убедиться, что DataContext из ListBox является классом, который предоставляет свойство GeoList.

1 голос
/ 24 февраля 2009

Другим хорошим способом было бы создание geoList как ресурса

<WindowResources>
  <l:GeoCollection x:Key="geoList"/>
</WindowResources>

Тогда у вас есть

GeoCollection geoList = FindResource("geoList") as GeoCollection;

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

0 голосов
/ 24 февраля 2009

Предложение Кента - это путь ...

Кроме того, если вы не хотите указывать свой DataContext в списке, вы также можете получить свойство с другой формой привязки:

Убедитесь, что у вашего корневого элемента управления есть имя, т.е. "Root"

{Binding ElementName=Root, Path=GeoList}
...