WPF 项控件绑定在绑定到视图模型中对象的可观察集合时不更新

本文关键字:绑定 观察 集合 更新 对象 控件 模型 视图 WPF | 更新日期: 2023-09-27 18:32:00

基本上,我的视图模型中有一个对象,其中包含自定义对象的可观察集合。我的 XAML 的 DataContext 设置为我的 ViewModel,我的 ViewModel 包含一个"暂存盘"对象,暂存盘对象包含一个 ObservableCollection of Frame 对象。暂存盘和集合都设置为依赖项属性。

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

Frame 对象有 3 个标准属性:索引、图像和图像 URL。

我正在尝试使用以下代码绑定到 XAML 中的可观察集合:

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

其中缩略图模板在窗口资源中定义为:

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

从理论上讲,应该发生的是,暂存盘应该接收文件名,创建 Frame 对象,将它们添加到集合中,然后绑定应该显示它们。可观察集合正在工作并正在填充,但绑定未显示正在更新。所有可更新的属性都设置为依赖项属性,因此绑定应该更新不是吗?

文件链接:

XAML

视图模型

暂存盘

框架

WPF 项控件绑定在绑定到视图模型中对象的可观察集合时不更新

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

页面的DataContext已经是 EditorViewModel 的实例,并且您希望ItemsControl DataContext绑定到该视图模型的属性ThumbnailScratchdisk

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