更改了ContentControl的WPF InvokeCommandAction

时间:2017-03-10 09:12:22

标签: c# wpf mvvm

我有一个内容控件:

<ContentControl Content="{Binding PageViewModel}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="ContentChanged">
            <i:InvokeCommandAction Command="{Binding MyCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</ContentControl>

每次PageViewModel更改时我都需要调用MyCommand。

但是命令没有被触发。

这可能吗?

1 个答案:

答案 0 :(得分:1)

您应该在PageViewModel属性的设置器中处理此问题:

private object pageViewModel;
public object PageViewModel
{
    get { return pageViewModel; }
    set
    {
        pageViewModel = value;
        OnPropertyChanged();
        MyCommand.Execute(null);
    }
}

ContentControl没有ContentChanged个事件。它有一个受保护的OnContentChanged方法,如果您创建自定义ControlControl类,则可以覆盖该方法:

WPF: How to created a routed event for content changed?

您可以创建在此方法中引发的自定义事件。

但MVVM的做法是在设置PageViewModel属性时调用视图模型中的命令。