为每个UserControl添加触发器

时间:2015-09-22 06:54:47

标签: 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>

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

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

1 个答案:

答案 0 :(得分:0)

你可以创建一个&#34; base-load&#34;使用Interaction.Triggers进行Usercontrol,并在其中放入ContentPresenter,将实际内容绑定到该位置。

<UserControl x:class="OneOfMyOtherControls">
   <MyBaseUserControl>
     <!-- your UserControl Content-->
   </MyBaseUserControl>
</UserControl>