2010-10-06 3 views
31

Я пытаюсь изучить WPF, распутывая откровенно кошмарный проект, написанный парнем, который был на этой работе передо мной. Извините, если некоторые из моих вопросов в значительной степени являются домашним заданием, но я пытаюсь выяснить, что делает существующий XAML, с недостаточным пониманием концепций, стоящих за ним ...Что означает «ItemsSource =" {Binding} "?

В любом случае, у меня есть ListView с этим как часть его определения:

<ListView 
    DataContext="{StaticResource XMLFileGroups}" 
    ItemContainerStyle="{StaticResource XMLItemStyle}" 
    ItemsSource="{Binding}"> 

Теперь я могу получить вид вокруг моей головы, что «DataContext» и «ItemContainerStyle» линии делают; они, как представляется, ссылаются на метод сортировки существующего списка и структуру, определяющую некоторое визуальное поведение ListView, соответственно.

Что меня разрушает, так это тот факт, что ItemsSource указан как «{Binding}». Все, что говорит мне, что есть какая-то привязка данных на месте, но я не понимаю, как линия может быть значимой, и при этом ее удаление останавливает отображение любых данных.

Может кто-то пролить свет на то, что здесь происходит, или где я должен искать фактическое определение привязки? Я просто не понимаю, что вижу.

ответ

30

Без пути {Binding} свяжется с самим DataContext.
Добавление пути свяжет свойство datacontext.

+0

Таким образом, «{Binding}» специально связывается с коллекцией, созданной свойством DataContext ListView? Это что-то, что обычно происходит для объектов типа View или оно специфично для ListView? Извиняюсь за попрошайничество для получения дополнительной информации, но я уверен, что вы можете оценить, что поиск «ItemsSource =» {Binding} «не является достаточно узким поиском для меня, чтобы получить много результатов, поэтому я задал этот вопрос в первом место ... – Frosty840

+0

Я не уверен, что вы просите. '{Binding}' может использоваться в любом контексте, где значением, которое вы хотите связать, является сам DataContext. Он чаще всего используется для привязки DataSource. – SLaks

+0

Я думал, что это так, но я не мог быть уверен. Спасибо за разъяснения. – Frosty840

6

Этот пример указывает, что привязка - это DataContext. То же самое в код будет

MyList.ItemsSource = new Binding(); 

Вы также можете сделать такие вещи, как:

ItemsSource="{Binding YourBindingField, Source={StaticResource YourStaticDataSource}}" 

, который будет переводить на это в коде позади:

 MyList.ItemsSource = new Binding() {ElementName = "YourBindingField", Source = YourStaticDataSource}; 

Надежда, что помогает

+1

Извините, я не упомянул, что то, над чем я работаю (теоретически) проект MVVM, поэтому нет никакого кода. Хотя я уверен, что вы говорите правильно, у меня нет контекста, чтобы интерпретировать его. – Frosty840

Смежные вопросы