1

私はここで少し困惑しています。私はList<BitmapImage>データを取り込んでいる Viewmodel に を持っています。ItemsControl を使用してビューにリストを表示しようとしていますが、画像が表示されません。奇妙なことに、Image タグを使用している場合は、同じコレクションにアクセスして表示する画像を取得できます。

<ItemsControl ItemsSource="{Binding Path=Images}" MinHeight="80">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Image Source="{Binding}" MinWidth="80" MinHeight="80" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
    <Image HorizontalAlignment="Left" Name="image1" Stretch="Uniform" VerticalAlignment="Top" Source="{Binding Path=Images[0]}" MinHeight="80" MaxHeight="200" />

どちらも を指していることに注意してくださいImages。Image が表示され、ItemsControl は空のままです。何が起こっている?

4

1 に答える 1

0

リストではなく、ObservableCollection を使用してこれを解決します。ItemsControl は、リストの変更通知で再バインドされません。ObservableCollection を使用する場合も、List の変更通知を明示的に呼び出すことについて心配する必要はありません。

私はあなたのシナリオを再現することができ、ObservableCollection を使用するだけで問題が解決しました。理由について:http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

具体的には、備考セクションの次の引用を参照してください。

バインドされたクライアントとデータ ソースの間のバインドで変更通知が発生するようにするには、バインドされた型で次のいずれかを行う必要があります。 INotifyPropertyChanged インターフェイスを実装します (推奨)。バインドされた型の各プロパティに変更イベントを提供します。両方を行わないでください。

于 2012-04-12T03:24:37.333 に答える