2009-02-24 4 views
2

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

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

... позже ...

geoListBox.ItemsSource = geoList; 

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

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

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

ответ

1

Еще один хороший способ будет инстанцировании geoList как ресурс

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

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

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

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

4

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

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

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

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

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

0

Кент предложение путь ...

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

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

{Binding ElementName=Root, Path=GeoList} 
+0

Должен признаться, я не понимаю, как это работает. Я пробовал все ваши предложения, и программа компилируется. Но все, что я получаю, - это пустая запись в моем списке. Я использовал ObservableCollection, потому что каждый раз, когда я добавляю объект, Listbox обновляется. Но этого не происходит. – TalkingCode

+0

Убедитесь, что ваш элемент управления имеет имя, указанное так: x: Name = «Root» в вашем файле xaml ... Кроме того, убедитесь, что привязка не находится в шаблоне, так как вам может понадобиться RelativeSource привязка для правильной привязки к вашим данным! – Arcturus