图像绑定适用于Image不在ItemsControl中

时间:2012-04-12 02:03:44

标签: wpf image data-binding itemscontrol

我在这里有点困惑。我在一个正在填充的Viewmodel中有一个List<BitmapImage>。我试图用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。图像显示,ItemsControl保持为空。发生了什么事?

1 个答案:

答案 0 :(得分:0)

您将通过使用ObservableCollection而不是List来解决此问题。 ItemsControl不会重新绑定List的更改通知。如果使用ObservableCollection,则无需担心显式调用List的更改通知。

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

具体来说,请参阅备注部分中的这句话:

  

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