Привязка MVVM в шаблонах (в частности, HeaderTemplate элемента управления Expander) - PullRequest
0 голосов
/ 14 февраля 2019

Хорошо, поэтому у меня есть шаблон данных с именем GeneralVocabItemTemplateInput.В нем находится расширитель управления.

Шаблон данных связан с моделью представления, поэтому можно связывать различные элементы.Фактически я могу связать текст заголовка для расширителя следующим образом:

<DataTemplate x:Key="GeneralVocabItemTemplateInput">
            <Grid Margin="2">
                <Expander Header="{Binding ID}">

И это прекрасно работает.Текст заголовка отображает значение идентификатора.Дело в том, что контекст данных экспандера - это модель представления, которую я хочу.

Пока все хорошо.Теперь вместо идентификатора в виде текста я хотел использовать шаблон, чтобы иметь больше возможностей для настройки.Я создал шаблон данных, который я мог назначить свойству HeaderTemplate в экспандере.Поэтому я создал один в своем словаре ресурсов, который выглядит следующим образом:

<DataTemplate x:Key="TemplateTest">
    <StackPanel>
        <Border BorderThickness="1" BorderBrush="Black">
            <TextBlock Margin="2" Text="{Binding ID}"/>
        </Border>
    </StackPanel>
</DataTemplate>

Очень просто, заданная граница, а также то же значение границы, что и раньше.

Я использую это в расширителе следующим образом:

<DataTemplate x:Key="GeneralVocabItemTemplateInput">
            <Grid Margin="2">
                <Expander HeaderTemplate="{StaticResource TemplateTest}">

Здесь я получаю проблему.Появляется черная рамка, но внутри ничего нет.

Очевидно, что шаблон работает и его можно найти, так как появляется граница, но нет привязки.Я поэкспериментировал с этим некоторое время и не нашел решения.

Одна вещь, которую я попытался сделать, это изменить место хранения TemplateTest (шаблон данных).Он находился в отдельном файле словаря ресурсов, поэтому я переместил его в тот же файл, что и мой исходный шаблон (GeneralVocabItemTemplateInput), чтобы увидеть, если это что-то изменило.Без разницы.

Я надеюсь, что кто-то может пролить свет на это.

1 Ответ

0 голосов
/ 14 февраля 2019

Он работает на моей стороне со следующим изменением:

<Expander HeaderTemplate="{StaticResource TemplateTest}" Header="{Binding}">

Объяснение: DataContext в HeaderTemplate установлено на Header (что кажется разумным).Когда нет установленного Header, DataContext поэтому равен null.

...