Сообщение Re[12]: ElementName и Source, RelativeSource не эквивалентн от 30.12.2015 7:53
Изменено 30.12.2015 8:13 igor-booch
Понятно что использовать DataContext="{Binding RelativeSource={RelativeSource Self}}" нельзя только в UserControl1. В Window можно использовать.
Хорошо. Замените в предыдущем примере строки:
на
Казалось бы они эквивалентны, но после них UserControl1 остается без текста, а Button продолжает работать нормально. Почему?
Мне ответили на msdn. https://social.msdn.microsoft.com/Forums/vstudio/en-US/ca1da6ba-80da-4947-824a-af667961cc4b/datatemplate-property-in-a-custom-usercontrol?forum=wpf
Когда внутри шаблона происходит биндинг к Data.Name1, элемент window еще не инициализирован (либо вне области видимости, неважно). В этот момент window не доступен как инициализированный элемент, но доступен по ссылке. Если вышеуказанные строки переписать так:
То заработает и кнопка и UserControl1.
Подробней об отличиях x:Reference и ElementName: http://stackoverflow.com/questions/19244111/what-is-the-difference-between-xreference-and-elementname
Хотя я теперь я не понимаю почему работает Button?
Хорошо. Замените в предыдущем примере строки:
<DataTemplate x:Key="dt">
<Label Content="{Binding Data.Name1, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</DataTemplate>на
<DataTemplate x:Key="dt">
<Label Content="{Binding Data.Name1, ElementName=window}" />
</DataTemplate> Казалось бы они эквивалентны, но после них UserControl1 остается без текста, а Button продолжает работать нормально. Почему?
Мне ответили на msdn. https://social.msdn.microsoft.com/Forums/vstudio/en-US/ca1da6ba-80da-4947-824a-af667961cc4b/datatemplate-property-in-a-custom-usercontrol?forum=wpf
Когда внутри шаблона происходит биндинг к Data.Name1, элемент window еще не инициализирован (либо вне области видимости, неважно). В этот момент window не доступен как инициализированный элемент, но доступен по ссылке. Если вышеуказанные строки переписать так:
<DataTemplate x:Key="dt">
<Label Content="{Binding Data.Name1, Source={x:Reference window}}" />
</DataTemplate>То заработает и кнопка и UserControl1.
Подробней об отличиях x:Reference и ElementName: http://stackoverflow.com/questions/19244111/what-is-the-difference-between-xreference-and-elementname
Хотя я теперь я не понимаю почему работает Button?
Re[12]: ElementName и Source, RelativeSource не эквивалентн
Понятно что использовать DataContext="{Binding RelativeSource={RelativeSource Self}}" нельзя только в UserControl1. В Window можно использовать.
Хорошо. Замените в предыдущем примере строки:
на
Казалось бы они эквивалентны, но после них UserControl1 остается без текста, а Button продолжает работать нормально. Почему?
Мне ответили на msdn. https://social.msdn.microsoft.com/Forums/vstudio/en-US/ca1da6ba-80da-4947-824a-af667961cc4b/datatemplate-property-in-a-custom-usercontrol?forum=wpf
Когда внутри шаблона происходит биндинг к Data.Name1, элемент window еще не инициализирован (либо вне области видимости, неважно). В этот момент window не доступен как инициализированный элемент, но доступен по ссылке. Если вышеуказанные строки переписать так:
То заработает и кнопка и UserControl1.
Подробней об отличиях x:Reference и ElementName: http://stackoverflow.com/questions/19244111/what-is-the-difference-between-xreference-and-elementname
Хотя сначала я не понимал почему не работает UserConrol1, теперь я не понимаю почему работает Button.
Хорошо. Замените в предыдущем примере строки:
<DataTemplate x:Key="dt">
<Label Content="{Binding Data.Name1, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</DataTemplate>на
<DataTemplate x:Key="dt">
<Label Content="{Binding Data.Name1, ElementName=window}" />
</DataTemplate> Казалось бы они эквивалентны, но после них UserControl1 остается без текста, а Button продолжает работать нормально. Почему?
Мне ответили на msdn. https://social.msdn.microsoft.com/Forums/vstudio/en-US/ca1da6ba-80da-4947-824a-af667961cc4b/datatemplate-property-in-a-custom-usercontrol?forum=wpf
Когда внутри шаблона происходит биндинг к Data.Name1, элемент window еще не инициализирован (либо вне области видимости, неважно). В этот момент window не доступен как инициализированный элемент, но доступен по ссылке. Если вышеуказанные строки переписать так:
<DataTemplate x:Key="dt">
<Label Content="{Binding Data.Name1, Source={x:Reference window}}" />
</DataTemplate>То заработает и кнопка и UserControl1.
Подробней об отличиях x:Reference и ElementName: http://stackoverflow.com/questions/19244111/what-is-the-difference-between-xreference-and-elementname
Хотя сначала я не понимал почему не работает UserConrol1, теперь я не понимаю почему работает Button.