我们在四个 XAML 视图中有四个相同的带有网格的弹出窗口。我想将该 XAML 移动到模板并通过 Style 应用于所有四个中的 ContentControls。问题在于传递网格中项目的来源。我们从四个不同的视图模型中得到了它。每种情况都不同,唯一不同的是四种情况。我可能最终会一致地重命名它们,但我想这是一个单独的问题。
显然我根本不了解 TemplateBinding。如何将模板的子属性绑定到要应用模板的 ContentControl 的属性?
除了 DataSource 属性的值发生变化外,网格的 XAML 与我们直接使用它时运行良好的 XAML 相同。
我添加了 TextBlock 只是为了看看我是否可以绑定任何东西。我确实到达NaN
那里。
<Style x:Key="HistoryPopupContentStyle" TargetType="ContentControl">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Vertical">
<TextBlock Text="{TemplateBinding Width,
diag:PresentationTraceSources.TraceLevel=High}"
Background="White"
Foreground="Black"/>
<dxg:GridControl
DataSource="{Binding RelativeSource={RelativeSource
Path=DataContext,
TraceLevel=High}"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
>
<!-- Columns. The grid displays column headers
as desired but with no rows -->
</dxg:GridControl.Columns>
</dxg:GridControl>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
<Popup
Name="PopHistory"
DataContext="{Binding Path=HistoryList}"
>
<ContentControl DataContext="{Binding Path=HistoryList}"
Style="{StaticResource HistoryPopupContentStyle}"
Name="Testing"
/>
</Popup>