以下に示すように、データ テンプレート セレクターを使用しています。
public class ExampleTemplateSelector : DataTemplateSelector
{
public DataTemplate Foo { get; set; }
public DataTemplate Bar { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var foo = item as FooType;
return foo != null ? Foo : Bar;
}
}
これを使用するための XAML: -
<mtf:DetailTemplateSelector
Foo="{StaticResource foo}"
Bar="{StaticResource bar}"
x:Key="baz" />
foo のデータ テンプレートは次のとおりです。
<DataTemplate x:Key="foo">
<TextBox Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},
Path=DataContext.DetailItems[2].Field.Value" />
</DataTemplate>
以下を使用してテンプレートを選択します: -
<ContentControl Content="{Binding Set}" ContentTemplateSelector="{StaticResource baz}" />
bar のデータ テンプレートは、detailItems[2] が範囲外になることがわかっている場合に使用するため、テンプレート セレクターを使用して、パラメーターを持たないデータ テンプレートを返し、Text="qux" とします。
表示に問題はなく、機能は正常に動作しています。例外が発生しているデバッグ出力で提供された情報が気になります。
インデックスを使用するデータ テンプレートが返されないのに、この例外がスローされるのはなぜですか?
必要に応じてさらに情報を提供できますが、データ ソースを表示しなくても、与えられた情報で十分であると期待しています。