夏休みの直前にいくつかの賢いことをしましたが、何らかの理由でコードを削除し、1 つの問題をどのように解決したか思い出せないので、StackOverflow の専門家に相談します。
基本的な考え方はこれです。ビューモデルの監視可能なコレクションにバインドされたリストビューがあります。リスト内の項目は、ジェネリック タイプ、または特殊化された継承クラスです。ここで、アイテムのタイプが Generic の場合は Generic ビューをリストに表示し、タイプが Specialized の場合は Specialized ビューを表示したいと考えています。ビューモデルごとにデータ テンプレートを設定し、そのビューにバインドしました。しかし、何らかの理由で、ビューをロードする代わりに、表示されるのはビューモデルの完全なクラス名だけです。ばかげたことを見逃していることはわかっていますが、どうやら脳をビーチに置き忘れたようです。
これがxamlです(名前空間などは削除されています):
<UserControl x:Class="ReportHostView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:vmrep="ViewModel.Report"
xmlns:vwrep="View.Report"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<DataTemplate x:Key="DefaultDataTemplate" DataType="{x:Type vmrep:GenericItemViewModel}">
<vwrep:GenericItemView />
</DataTemplate>
<DataTemplate x:Key="SpecializedDataTemplate" DataType="{x:Type vmrep:SpecializedItemViewModel}">
<vwrep:SpecializedItemView />
</DataTemplate>
<DataTemplate x:Key="ItemTemplate">
<ContentPresenter Content="{Binding}" />
</DataTemplate>
</UserControl.Resources>
<Grid Width="1024" Height="800">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ListView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" ItemTemplate="{StaticResource ItemTemplate}">
</ListView>
</Grid>