DataTemplate WPF 中样式设置器中的绑定

Posted

技术标签:

【中文标题】DataTemplate WPF 中样式设置器中的绑定【英文标题】:Binding in Style Setter in DataTemplate WPF 【发布时间】:2017-01-30 01:28:24 【问题描述】:

好的,我有一个相对复杂的问题。我正在尝试在 WPF 中创建一个窗口。此窗口上的主要元素是 DataGrid。 DataGrid 中的每一行都有一个我使用DataGrid.RowDetailsTemplate 设置的DetailsPane。根据某些特定于行的值,我需要 DetailsPane 来显示不同的元素。为此,我在 DataTemplate 的根目录放置了一个 ContentControl,并使用带有 DataTriggers 的 Style 来设置它的 Content 属性。现在,inside 这些 Setter 之一是 ComboBox。此 ComboBox 需要将其 ItemsSource 绑定到一个列表,该列表存储在 Window 级别的依赖项属性中(因为无论行如何,它都是同一个列表)。以下是我正在查看的简化版本:

<Window>
    ...
    <DataGrid>
        ...
        <DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <ContentControl>
                    <Style TargetType="ContentControl">
                        <Style.Triggers>
                            <DataTrigger Binding="Binding RowSpecificBooleanProperty" Value="False">
                                <Setter Property="Content">
                                    <Setter.Value>
                                        ...
                                        <ComboBox ItemsSource=HowDoIBindThisToTheWindowProperty/>
                                    </Setter.Value>
                                </Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </ContentControl>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>
    </DataGrid>
</Window>

所以我想弄清楚的是如何将该 ComboBox 的 ItemsSource 绑定到***窗口的依赖项属性。 Andy 知道如何实现这一点?

编辑:

我之前应该提到过这一点,但我已经尝试在绑定中使用 RelativeSource AncestorType=Window 和 ElementName。在这两种情况下,ComboBox 中的列表在运行时都是空白的。

【问题讨论】:

RelativeSource (= Window) (***.com/questions/84278/…) 或 ElementName 通常用于 Binding 【参考方案1】:
ItemsSource="Binding WhateverList, RelativeSource=RelativeSource AncestorType=Window"

【讨论】:

对不起,我已经试过了。我应该把它放在问题中,我更新了它。

以上是关于DataTemplate WPF 中样式设置器中的绑定的主要内容,如果未能解决你的问题,请参考以下文章

WPF ContextMenu DataTemplate MenuItem Visibility 问题

将情节提要的目标设置为 DataTemplate WPF 中的按钮

WPF DataTemplate 绑定取决于属性的类型

WPF在DataTemplate中宽度设置

如何为 WPF TreeView 设置 DataTemplate 以显示列表的所有元素?

在代码隐藏中的 DataTemplate 中查找 WPF 元素