为什么在datatemplate不是当前使用的时候抛出ArgumentOutOfRangeException

时间:2013-03-25 14:59:02

标签: c# wpf xaml data-binding datatemplate

我正在使用数据模板选择器,如下所示: -

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”。

显示不是问题,功能正常,我只关心调试输出中给出的信息,这是我看到异常的地方。

为什么即使没有返回使用索引的datatemplate,也会抛出此异常?

如果有必要,我可以提供更多信息,但我希望给定的信息足够,而不必查看数据源。

0 个答案:

没有答案