Используя WPF, я хочу привязать заголовок GroupBox к typename полиморфного класса. Поэтому, если у меня есть класс с именем Element и два класса, производных от Element, такие как BasicElement и AdvancedElement, я хочу, чтобы заголовок GroupBox имел значение «BasicElement» или «AdvancedElement». Вот xaml, который я использую для GroupBox. Это часть DataTemplate, которая используется ItemsControl. Я надеюсь на что-то вместо Path = DerivedTypeNameOf (group) в XAML, где group - каждая группа в массиве groups.
Обратите внимание, что для ObjectInstance объекта TheData задан допустимый экземпляр GroupSet, который содержит массив некоторых BasicGroups и AdvancedGroups.
Вот соответствующие классы code-behind:
public class Group
{
public string groupName;
public string df_groupName
{
get { return this.groupName; }
set { this.groupName = value; }
}
}
public class BasicGroup : Group
{
}
public class AdvancedGroup : Group
{
}
public class GroupSet
{
public Group [] groups;
public Group [] df_groups
{
get { return this.groups; }
set { this.groups = value; }
}
};
Вот XAML:
<UserControl.Resources>
<ResourceDictionary>
<ObjectDataProvider x:Key="TheData" />
<DataTemplate x:Key="GroupTemplate">
<GroupBox Header="{Binding Path=DerivedTypeNameOf(group)}">
<TextBox Text="This is some text"/>
</GroupBox>
</DataTemplate>
</ResourceDictionary>
</UserControl.Resources>
<ItemsControl ItemsSource="{Binding Source={StaticResource TheData}, Path=groups}" ItemTemplate="{StaticResource GroupTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>