为每个UserControl添加触发器

Dai*_*Dai 5 wpf xaml

我的应用程序有大约15个不同的UserControl,它们在运行时统一加载到内容区域.

我的项目是100%MVVM兼容的,所以我在每个UserControl的XAML中插入了以下XAML:

<UserControl
    ...
    xmlns:intr="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
>

    <intr:Interaction.Triggers>
        <intr:EventTrigger EventName="Loaded">
            <intr:InvokeCommandAction Command="{Binding ViewLoadedCommand}"/>
        </intr:EventTrigger>
    </intr:Interaction.Triggers>

    <!-- Rest of UserControl content here -->

</UserControl>
Run Code Online (Sandbox Code Playgroud)

显然这不是理想的,也是对DRY的违反.

将此XAML应用于这组UserControls的最佳方法是什么?(但不是每个 UserControl,所以一个简单的<Style Type="UserControl" />不合适).

bli*_*eis 0

您可以使用 Interaction.Triggers 创建一个“基本负载”用户控件,然后将一个 ContentPresenter 放入其中,将实际内容绑定到其中。

<UserControl x:class="OneOfMyOtherControls">
   <MyBaseUserControl>
     <!-- your UserControl Content-->
   </MyBaseUserControl>
</UserControl>
Run Code Online (Sandbox Code Playgroud)