【问题标题】:WPF ItemsControl binding not updating when bound to an ObservableCollection in an object in the View ModelWPF ItemsControl 绑定在绑定到视图模型中对象中的 ObservableCollection 时未更新
【发布时间】:2015-01-23 17:35:33
【问题描述】:

基本上,我的视图模型中有一个对象,其中包含自定义对象的 ObservableCollection。我的 XAML 的 DataContext 设置为我的 ViewModel,我的 ViewModel 包含一个“Scratchdisk”对象,而 Scratchdisk 对象包含一个 Frame 对象的 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 在窗口资源中定义为:

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

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

文件链接:

XAML

ViewModel

Scratchdisk

Frame

【问题讨论】:

  • 请发布具有可观察集合的视图模型代码。请发布您的顶级数据上下文的完整层次结构。我感觉到您与 Frames 对象的绑定,但您的数据上下文是视图模型。您需要导航到 ViewModel.ScratchObject.Frames
  • @PiyushParasha 我已经链接了帖子底部的文件,它们是相当大的文件,所以我不想在问题中引用它们。
  • 您需要通知您Frame中的任何属性的更改,例如ImageUrl 到您的视图。您可以通过在 Frame 类中提供默认值 ImageUrl 来测试它,如果您现在可以看到此默认值,那么您知道绑定正在工作,只是在 VM 中更改时没有更新。
  • 请在你的问题上多加努力,你的 viewmodel 和 observablecollection ,你在哪里更新它,'ThumbnailScratchdisk' 是什么,只有相关的 xaml。没有人想要 dl 你的东西

标签: c# wpf xaml binding dependency-properties


【解决方案1】:

问题在于DataContextItemsControl 的绑定。 您将其设置为"{Binding Source=ThumbnailScratchdisk}",但您(可能)想要将其设置为"{Binding ThumbnailScratchdisk}"

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 抱歉,这不起作用。我认为这是隐含的,因为 ItemsControl 的 DataContext 设置为 ThumbnailScratchdisk
    • 是的,我一发布就意识到 :( 我在 ScratchObject 类中找不到 SetValue 方法。它在哪里,代码是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多