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 而不是 List 来解决这个问题。ItemsControl 不会重新绑定列表的更改通知。如果您使用 ObservableCollection,您也不必担心显式调用列表的更改通知。

我能够复制您的场景,只需使用 ObservableCollection 即可解决问题。至于为什么:http: //msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

具体来说,请参阅备注部分中的此引用:

要在绑定客户端和数据源之间的绑定中发生更改通知,您的绑定类型应该: 实现 INotifyPropertyChanged 接口(首选)。为绑定类型的每个属性提供一个更改事件。不要两者都做。

于 2012-04-12T03:24:37.333 回答