0

オブジェクトの 2 次元リストをコンテンツ コントロールにリンクしようとしています。理解できない例外が発生しています。誰かが私のためにそれを明確にすることができますか? (C# の first.ItemsSource プロパティを、コードで宣言した NationMetrics オブジェクトに設定しようとしましたが、同じ例外が発生しました)

外部例外:

タイプ 'System.Windows.Controls.ItemCollection' のコレクションに値を追加すると、例外がスローされました。

内部例外:

ItemsSource の使用中は、操作は無効です。代わりに、ItemsControl.ItemsSource を使用して要素にアクセスして変更します。

NationMetrics クラス:

public class NationMetrics
{
     List<List<Field>> _Nations = new List<List<Field>>();

     public List<List<Field>> Nations { get { return _Nations; } set { _Nations = value; } }

}

これは、例外がトリガーされている MainWindow.xaml のスニペットです。

<Grid>
    <ItemsControl x:Name="first" ItemTemplate="{DynamicResource DataTemplate_Level1}" ItemsSource="{Binding Path=Nations, Source={StaticResource nationMetric}}" />
</Grid>

これは、nationMetric を定義する私の Window.Resources からのスニペットです。

<local:NationMetrics x:Name="nm" x:Key="nationMetric" />
4

1 に答える 1

1

次のようなものを試すことができます。

<Window.Resources>
    <DataTemplate x:Key="inner">
                    <TextBlock Content="{Binding}"/>
    </DataTemplate>

<DataTemplate x:Key="outer">
    <ItemsControl ItemsSource="{Binding}" ItemTemplate="{DynamicResource inner}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>
</DataTemplate>

</Window.Resources>

<ItemsControl x:Name="itemControl" ItemsSource="{Binding Path=Nations, Source={StaticResource nationMetric}}" ItemTemplate="{DynamicResource outer}">

これは基本的に、リスト内にリストがあることを識別し、バインディングを適切に行います。私はそれを試したことはありませんが、これはアプローチだと思います!

その他のリソース:

WPF:カスタムアイテムコントロールパネルを作成するには?

2次元コレクションを何らかのコントロールにバインドする

于 2012-06-14T02:59:49.670 に答える