wpf - 从 DataTemplate 内的资源绑定(bind)

标签 wpf xaml binding resources datatemplate

是否有某种方法可以获取 DataTemplateDataContext 以在其资源内的绑定(bind)中使用?

<DataTemplate x:Key="History">
  <ItemsControl ItemsSource="{Binding History}">
    <ItemsControl.Resources>
      <app:BitmapProvider x:Key="Converter" ShowDetails="True"
                          Type="{Binding Model.Type}" />
    </ItemsControl.Resources>
    <ItemsControl.ItemsPanel>
      <ItemsPanelTemplate>
        <StackPanel Orientation="Horizontal" IsItemsHost="True"/>
      </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
      <DataTemplate>
        <Image Source="{Binding Data, Converter={StaticResource Converter}}" />
      </DataTemplate>
    </ItemsControl.ItemTemplate>
  </ItemsControl>
</DataTemplate>

以上模板用作ListBoxCellTemplate。该级别的对象有两个属性,History(包含“历史信息”对象的列表)和Model(包含一堆其他内容,包括Type )。我使用 ItemsControl 来显示彼此相邻的历史项目;我想为每一个显示一张图像,该图像是从 BitmapProvider 获取的,它是一个 IValueConverter

转换器需要两位信息才能获得结果:一位是各个历史项目的Data,另一位是整个集合的Type。一个额外的复杂性是构建这个特定的转换器(或更改给定的Type)的成本很高,所以我不想将它放在单个历史项目的级别,或者使用MultiBinding,我无法将其放在模板之外,因为那样它就无法访问Type

不幸的是,上面的代码给了我以下错误:

System.Windows.Data 错误:2:找不到目标元素的控制 FrameworkElement 或 FrameworkContentElement。 BindingExpression:Path=模型.类型;数据项=空;目标元素是“BitmapProvider”(HashCode=57142809);目标属性是“Type”(类型“TypeDetails”)

我的理解是,资源无法弄清楚如何获取它所包含的元素的DataContext

(我已经搜索过,我能找到的大多数答案都建议将其移到模板之外或使用 MultiBinding 代替——据我所知,在这种情况下,这两种方法都不会真正起作用可以看出,正如我上面所解释的。但我很高兴被证明是错误的,或者给出另一种选择。)

最佳答案

我认为你可以通过 DataContextSpy 来实现这一点。

尝试这样的事情:

<ItemsControl.Resources>
  <spy:DataContextSpy x:Key="Spy"/>
  <app:BitmapProvider x:Key="Converter" ShowDetails="True"
                      Type="{Binding DataContext.Model.Type,Source={StaticResource Spy}}" />
</ItemsControl.Resources>

关于wpf - 从 DataTemplate 内的资源绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5401932/

相关文章:

java - JTable 和迭代绑定(bind) ObservableList

c# - 如何将 ProgressBar 放在 Button 中

c# - 如何处理混合模式项目中的打印?

wpf - 想要为tabcontrol制作可滚动的选项卡

c# - 如何将 WMI 集合显示到 WPF DataGrid

c# - DataGrid 中的 WPF 绑定(bind)到 DataContext

wpf - 如何设置 WPF 日历中 BlackoutDates 的样式

c# - 双向绑定(bind)设置问题

Java 数据绑定(bind)最佳实践

c# - TextBox 不遵守 Get 返回的值