绑定到视图模型中的对象中的ObservableCollection时,WPF ItemsControl绑定不会更新

时间:2014-11-25 16:03:16

标签: c# wpf xaml binding dependency-properties

基本上我的视图模型中有一个对象,它包含一个自定义对象的ObservableCollection。我的XAML的DataContext设置为我的ViewModel,我的ViewModel包含一个' Scratchdisk'对象,Scratchdisk对象包含一个ObservableCollection框架对象。 Scratchdisk和Collection都设置为DependencyProperties。

简而言之:XAML --DataContext--> EditorViewModel --DependencyProperty--> Scratchdisk --DependencyProperty--> ObservableCollection<Frame>

Frame对象有3个标准属性:Index,Image和ImageUrl。

我试图使用以下代码绑定到我的XAML中的ObservableCollection:

<ItemsControl DataContext="{Binding Source=ThumbnailScratchdisk}" ItemsSource="{Binding Frames, UpdateSourceTrigger=PropertyChanged}" ItemTemplate="{StaticResource ThumbnailTemplate}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel Orientation="Horizontal"></VirtualizingStackPanel>
         </ItemsPanelTemplate>
     </ItemsControl.ItemsPanel>
</ItemsControl>

其中ThumbnailTemplate在Window Resources中定义为:

<DataTemplate x:Key="ThumbnailTemplate">
    <Image Width="128" Height="96" Source="{Binding ImageUrl}"/>
</DataTemplate>

理论上,应该发生的是,Scratchdisk应该接收文件名,创建Frame对象,将它们添加到Collection中,然后绑定应该显示它们。 ObservableCollection正在工作并正在填充,但绑定并未被视为正在更新。所有可更新的属性都设置为DependencyProperties,因此绑定应该更新吗?

文件链接:

XAML

ViewModel

Scratchdisk

Frame

2 个答案:

答案 0 :(得分:4)

问题出在您DataContext的{​​{1}}的绑定中。 您将其设置为ItemsControl,但您(可能)想要的是将其设置为"{Binding Source=ThumbnailScratchdisk}"

页面的"{Binding ThumbnailScratchdisk}"已经是DataContext的实例,您希望EditorViewModel的{​​{1}}绑定到DataContext的属性ItemsControl那个viewmodel。

答案 1 :(得分:0)

尝试将XAML中的绑定路径更改为ThumbnailScratchdisk.Frames