【问题标题】:wpf pass datatemplate to new windowwpf将数据模板传递到新窗口
【发布时间】:2017-06-13 09:40:10
【问题描述】:

我需要将 DataTemplate 发送到新窗口以进行打印。

1) 我创建了一个通用窗口,我们将其命名为 PrintPreview,其中包含以下内容:

FlowDocument > BlockUiContainer > ContentControl(负责显示我将发送给它的DataTemplate)

问题是数据模板内的绑定不起作用。 (并非适用于所有情况)

例如: 我的应用程序中某处有这个数据模板

<DataTemplate x:Key="MyPrintPreview">
        <DockPanel>
            <TextBlock Text="{Binding SomeProperty1,RelativeSource={RelativeSource AncestorType=UserControl}}"></TextBlock>
            <TextBlock Text="{Binding Source={StaticResource SomeViewModel},Path=SomeProperty2}"></TextBlock>
        </DockPanel>
</DataTemplate>

上面的 DataTemplate 运行良好,并在我当前的 View (UserControl) 中显示了这两个属性 但是当我将此 DataTemplate 发送到新窗口 PrintPreview 时,我遇到了以下问题

第一个 TextBlock (SomeProperty1) 无法显示内容

第二个 TextBlock (SomeProperty2) 显示得很好!

我不知道如何使这项工作。或者如果我做错了?

【问题讨论】:

    标签: wpf window datatemplate


    【解决方案1】:

    您应该将ContentControlContent 属性设置或绑定到一个对象,该对象包含ContentTemplate 中的元素尝试绑定到的属性。

    因此,将ContentControlContentTemplate 属性设置为您的DataTemplate,并将Content 属性设置为要绑定到的实际对象。这就是应该使用ContentControl 的方式。

    另请注意,要使您的第一个绑定生效,ContentControl 必须是 UserControl 的子代,因为您绑定到父代 UserControlSomeProperty1。如果没有父UserControl,绑定总是失败。

    【讨论】:

    • 谢谢,但为什么属性 2 有效? SomeViewModel 资源也在我当前视图的用户控制级别中定义
    • 它不依赖于 DataContext,而是依赖于显然在范围内的资源。
    猜你喜欢
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2013-06-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    相关资源
    最近更新 更多