Вложенные фигурные скобки {{ }} в WPF / XAML

#.net #wpf #xaml #binding #markup

#.net #wpf #xaml #привязка #разметка

Вопрос:

Что означают вложенные фигурные скобки в значениях атрибутов в разметке WPF / XAML? Как в следующем примере:

  <ListBox ItemsSource="{Binding Source={StaticResource pictures}}">
  

Комментарии:

1. Почему это не может быть просто <ListBox ItemsSource="{StaticResource pictures}"> ?

Ответ №1:

Это привязывает поле ItemsSource списка к StaticResource вызываемому pictures . Это просто вложение одного расширения разметки в другое.

Читайте о расширениях разметки в XAML здесь: http://msdn.microsoft.com/en-us/library/ms747254.aspx

Комментарии:

1. Хорошо, спасибо. Нельзя ли добиться того же эффекта, используя следующую упрощенную запись: <ListBox ItemsSource=»{StaticResource pictures}»>

2. Нет, когда вы привязываете данные к an ItemsSource , вам нужно указать Binding объект, поэтому вы должны использовать {Binding Source=...} .

3. @BoltClock: привязка не требуется. Любое свойство зависимости может иметь обычное присвоенное значение. Поскольку Source значение исправлено и Path по умолчанию . равно , предложенное Эндрю упрощение действительно идентично в этом случае. Это было бы неверно, если Path бы было указано значение, отличное от значения по умолчанию.

Ответ №2:

Вложение нескольких расширений разметки поддерживается WPF, и каждое расширение разметки будет оцениваться в первую очередь.

  <Setter Property="Background"
Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />
  

В этом случае сначала вычисляется оператор x:Static, который возвращает строку. Затем эта строка используется в качестве аргумента для DynamicResource .

итак, здесь

 <ListBox ItemsSource="{Binding Source={StaticResource pictures}}">
  

он назначит изображения (могут быть коллекцией) itemsource списка

пожалуйста, посмотрите на это http://msdn.microsoft.com/en-us/library/ms747254.aspx#Nesting