Я пишу UserControl, который я намерен использовать на нескольких страницах. Он должен инкапсулировать поведение одинаково для всех страниц. Но содержание и макет должны быть разными.Привязка DataTemplate в UserControl
В UserControl У меня есть ListView whoes ItemSource привязан к CollectionViewSource с включенной группировкой.
<ListView
ItemSource="{Binding Source={StaticResource Collection}}"
ItemTemplate="{Binding GroupedDataTemplate}">
<ListView.GroupStyle>
<GroupSytele HeaderTemplate="{Binding HeaderDataTemplate}"/>
</ListView.GroupStyle>
</ListView>
UserControl имеет DependencyProperties "GroupedDataTemplate", "HeaderDataTemplate" для компоновки и одну "GroupedCollection" для данных.
На странице, где используется UserControl, я определил DataTemplates как:
<controls:MyUserControl
GroupedCollection="{Binding DataContext.MyDataCollection, ElementName=thePage}">
<controls:MyUserControl.GroupedDataTemplate>
<DataTemplate>
<TextBlock Text="{Binding Description}"/>
</DataTemplate>
</controls:MyUserControl.GroupedDataTemplate>
<controls:MyUserControl.HeaderDataTemplate>
<DataTemplate>
<TextBlock Text="{Binding Key}"/>
</DataTemplate>
</controls:MyUserControl.HeaderDataTemplate>
</controls:MyUserControl>
Моя проблема в том, что определение DataTemplate для «GroupedDataTemplate» работает, как и ожидалось, описание отображается. Но для «HeaderDataTemplate» это не так, показано только представление ToString() объекта.
Вызывается установщик «HeaderDataTemplate» и DataTemplate назначается DependencyProperty UserControl.
Если я сам заменю UserControl на ListView, он работает как expceted. Таким образом, привязка работает с описанием и ключом, но она будет работать только для описания, если она находится внутри UserControl.
В целях тестирования я добавил конвертер к привязке Ключа на странице и его никогда не вызывают. Я все случаи, когда я определяю DataTemplate для ItemTemplate (ListView или GridView), он работает, но не для HeaderTemplate из GroupStyle.
В чем моя вина?
Спасибо большое, отличное решение, даже потому, что я предпочитаю x: Bind. – Wernfried
@Wernfried, thx! Так это приемлемый ответ? –
@ GraceFeng-MSFT Означает ли это, что это ошибка в рамках UWP? –