4 つの XAML ビューにグリッドを含む 4 つの同一のポップアップがあります。その XAML をテンプレートに移動し、スタイルを介して 4 つすべての ContentControls に適用したいと思います。問題は、グリッド内のアイテムのソースを渡すことです。これは、4 つの異なるビュー モデルのそれぞれから得られます。4 つのケースで異なるのは、ケースごとに異なります。おそらく一貫して名前を変更することになりますが、それは別の問題だと思います。
明らかに、私は TemplateBinding をまったく理解していません。テンプレートの子のプロパティを、テンプレートを適用する ContentControl のプロパティにバインドするにはどうすればよいですか?
DataSource 属性の値が変わることを除けば、グリッドの 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>