「ItemsSourceを使用する前に、Itemsコレクションは空にする必要があります。」

.net binding entity-framework vb.net wpf

質問

この古いATC Avalonチームの記事「 カスタムビューの作成方法」で説明されているように、WrapPanelのようにスタイル設定されたWPF ListViewで画像を表示するようにしています

WPFリストビューWrapPanel画像

ListViewにLINQからエンティティへのADO.NET Entity Frameworkオブジェクトのコレクションを入力しようとすると、次の例外が発生します。

例外

ItemsSourceを使用する前に、Itemsコレクションは空にする必要があります。

私のコード…

ビジュアルベーシック

Private Sub Window1_Loaded(...) Handles MyBase.Loaded
    ListViewImages.ItemsSource = From g In db.Graphic _
                                 Order By g.DateAdded Ascending _
                                 Select g
End Sub

XAML

<ListView Name="ListViewImages"
          SelectionMode="Single"
          ItemsSource="{Binding}">
    <local:ImageView />
</ListView>

その行にブレークポイントを置きます。 ListViewImages.ItemsSourceは、LINQ割り当ての直前にはNothingありNothing

受け入れられた回答

この例外がスローされるのは、要素の内容がListViewのItemsコレクションに適用されるためです。そのため、XAMLはItemsコレクション内の単一のlocal:ImageViewでListViewを初期化します。しかし、ItemsControlを使用するときは、ItemsプロパティまたはItemsSourceプロパティのいずれかを使用する必要があります。両方を同時に使用することはできません。したがって、ItemsSource属性が処理されると例外がスローされます。

クラスのContentPropertyAttributeを探すことで、要素のコンテンツがどのプロパティに適用されるのかを知ることができます。この場合、ItemsControlのクラス階層の上位で定義されています。

[ContentPropertyAttribute("Items")]

ここでの意図は、ListViewのViewをlocal:ImageViewに設定することでした。そのため、設定するプロパティを明示的に示すように修正しました。

XAMLを修正すると、例外はなくなります。

<ListView Name="ListViewImages"
          SelectionMode="Single"
          ItemsSource="{Binding}">
    <ListView.View>
        <local:ImageView />
    </ListView.View>
</ListView>

その<ListView.View>タグがありませんでした。


人気のある回答

少し異なるシナリオでしばらく同じエラーが発生しました。私は持っていた

<wpftoolkit:DataGrid
    AutoGenerateColumns="False"
    ItemsSource="{Binding Path=Accounts}" >
    <wpftoolkit:DataGridTextColumn 
        Header="Account Name" 
        Binding="{Binding Path=AccountName}" />
</wpftoolkit:DataGrid>

これを修正しました

<wpftoolkit:DataGrid
    AutoGenerateColumns="False"
    ItemsSource="{Binding Path=Accounts}" >
    <wpftoolkit:DataGrid.Columns>
        <wpftoolkit:DataGridTextColumn 
            Header="Account Name" 
            Binding="{Binding Path=AccountName}" />
    </wpftoolkit:DataGrid.Columns>
</wpftoolkit:DataGrid>


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ