XAML の DataTemplate をネストされたクラスに関連付けることはできますか?
私は MVVM アプリケーションに取り組んでおり、データ テンプレートの問題に遭遇しました。アイテム コントロールの他のビュー モデルのコレクションを提供するビュー モデルがあります。これらの項目は、外側のビュー モデルでネストされたクラスとして定義された階層の一部です。これまでのところ、内部の入れ子になったクラスを参照するために XAML でマッピングを作成できませんでした。
クラス階層は次のとおりです (簡潔にするために簡略化しています)。
public class MainViewModel
{
public class A
{
}
public class B : A
{
}
public class C : A
{
}
public ObservableCollection<A> Items
{
get;
set;
}
}
XAML で、DataTemplate をタイプ B および C にマップしようとしていますが、ネストされたクラス名を完全に修飾することはできません。
<ItemsControl ItemsSource="{Binding Path=Items}">
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type ns:BracingViewModel.B}">
<Grid>
....
</Grid>
</DataTemplate>
<DataTemplate DataType="{x:Type ns:BracingViewModel.C}">
<Grid>
....
</Grid>
</DataTemplate>
</ItemsControl.Resources>
</ItemsControl>
問題: ネストされたクラスへの参照は、XAML でビルド エラーとして表示されます。私は以下を取得します:
Error 5 Cannot find the type 'ns:B'. Note that type names are case sensitive. Line...
Error 5 Cannot find the type 'ns:C'. Note that type names are case sensitive. Line...
A、B、C クラスの階層を MainViewModel クラスの外側 (名前空間レベル) に移動すると、問題なく動作します。
一般的な習慣として、ネストされたクラスとして定義されたビューモデルに関連するクラスを保持しようとしますが、それがこの問題につながります。
それで、私の質問: DataTemplate をネストされたクラスに関連付けることさえ可能ですか? もしそうなら、それは XAML 部分でどのように行われますか?
前もって感謝します... ジョー