Там - это существенная разница, с которой вы столкнетесь, как только у вас будет сложный путь свойств с введенными параметрами.
Концептуально они эквивалентны, поскольку оба они заканчивают тем, что устанавливаютBinding.Path
, один через параметризованный Binding
конструктор *1009* , другой непосредственно через свойство.То, что происходит внутри, сильно отличается, хотя Binding.Path
- это не просто строка, которая в обоих случаях будет передана свойству, это PropertyPath
.
Когда XAMLанализируется преобразователи типов используются для преобразования строк в типы, ожидаемые свойствами.Поэтому, когда вы используете Path=
, будет создан экземпляр PropertyPathConverter
для анализа строки и возврата PropertyPath
.Теперь вот разница:
(В случае конструктора Binding
Object[]
будет пустым)
Какое это имеет значение?
Если, например, у вас есть несколько индексаторов в классе , например, тот, который ожидает string
, и тот, который ожидает int
, и вы пытаетесь привести значение к целевому последнему, бросок не будетwork:
{Binding [(sys:Int32)0]}
В PropertyPath
отсутствует ITypeDescriptorContext
, потому что вызывается открытый конструктор, поэтому тип System.Int32
не может быть определен из строки sys:Int32
.
Есливы используете Path=
, но вместо этого будет использоваться конвертер типов, и тип будет разрешаться с использованием контекста, поэтому это будет работать:
{Binding Path=[(sys:Int32)0]}
(Детали реализации забавные )?)