Какой DataTemplate выбран на основе DataType, если несколько совпадений - PullRequest
4 голосов
/ 26 марта 2019

Учитывая следующую иерархию классов VM

public abstract class BaseClass {}
public class SubClass : BaseClass {}
public class OtherSubClass : BaseClass {}

Я хочу использовать ContentPresenter для выбора DataTemplate на основе типа DataContext.Следует выбрать один шаблон для подкласса, а другой - для всех других подклассов базового класса.Я использую следующую реализацию:

<ContentPresenter>
  <ContentPresenter.Resources>
    <DataTemplate DataType="{x:Type BaseClass}">
    ...
    </DataTemplate>
    <DataTemplate DataType="{x:Type SubClass}">
    ...
    </DataTemplate>
  </ContentPresenter.Resources>
</ContentPresenter>

Это работает, но я не уверен, насколько глупа эта реализация.

По каким правилам выбирается шаблон данных на основе типа данных?Я много искал, но не смог найти ответ.Я мог бы представить, что используется шаблон данных с наиболее конкретным типом соответствия, но я бы чувствовал себя лучше, если бы у меня было доказательство этого (и это не связано с чем-то другим, например с порядком DataTemplates или настроением WPF).

1 Ответ

2 голосов
/ 27 марта 2019

Согласно исходному коду FrameworkElement.FindTemplateResourceInternal, WPF будет искать ресурс для DataTemplate путем отслеживания наследования элемента данных.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...