有一个包含大量对象的视图,它们从DataTemplate声明中获取它们的视图:
<DataTemplate DataType="{x:Type vm:StatusAViewModel}" >
<vw:StatusAView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:StatusBViewModel}" >
<vw:StatusBView />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
现在我想根据要包含的数据类型显示一个包含其内容的弹出窗口:
<Popup AllowsTransparency="True"
IsOpen="{Binding IsPopupOpen,Mode=OneWay}"
PlacementTarget="{Binding PopupPlacementElement}" Placement="{Binding PopupPlacementMode}"
HorizontalOffset="{Binding PopupHOffset}" VerticalOffset="{Binding PopupVOffset}">
<ContentPresenter x:Name="StuckHere" Content="{Binding PopupData}" />
</Popup>
Run Code Online (Sandbox Code Playgroud)
StuckHere上的ContentTemplateSelector不起作用,因为它只被评估一次,当PopupData发生更改时,不会重新选择模板.
我可以找到的所有示例都依赖于默认的datatemplate,我不能在我的情况下使用,因为我已经为主视图提供了默认的DataTemplate,我只希望这个不同的模板影响我的弹出窗口.
有线索吗?
您可以应用另一组DataTemplates
in <Popup.Resources>
,它将覆盖在可视化树中更高的位置并Popup
仅应用于此
<Window.Resources>
<DataTemplate DataType="{x:Type vm:StatusAViewModel}" >
<vw:StatusAView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:StatusBViewModel}" >
<vw:StatusBView />
</DataTemplate>
</Window.Resources>
<Popup>
<Popup.Resources>
<DataTemplate DataType="{x:Type vm:StatusAViewModel}" >
<vw:StatusAPopupView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:StatusBViewModel}" >
<vw:StatusBPopupView />
</DataTemplate>
</Popup.Resources>
<!-- The DataTeplate used here will be a PopupView, not the regular View -->
<ContentPresenter Content="{Binding PopupData}" />
</Popup>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2845 次 |
最近记录: |