将WPF事件绑定到View后面的代码中的MVVM ViewModel命令

时间:2011-08-31 10:55:39

标签: wpf events binding mvvm command

我在XAML方面得到了以下解决方案,将事件绑定到命令,它可以正常工作

参考

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

按钮定义:

<Button>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="MouseEnter" >
            <i:InvokeCommandAction Command="{Binding FooCommand}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

问题: 现在我需要在我的对象 FrameworkElementFactory 代码中做同样的事情,但我无法理解,我想也许有人可以帮助我。

这是我停下的地方:

        FrameworkElementFactory newLabel = new FrameworkElementFactory(typeof(Label));
        newLabel.SetValue(Label.BackgroundProperty, Brushes.DarkMagenta);

        var eventTrigger = new System.Windows.Interactivity.EventTrigger("MouseDown");
        var invokeCommandAction = new System.Windows.Interactivity.InvokeCommandAction()
            {
                CommandName = "FooCommand",
                CommandParameter = new Object()
            };

有什么帮助吗?

提前致谢, 法扎德

1 个答案:

答案 0 :(得分:1)

不太确定这是否是唯一的方法,但你可以使用Interaction.GetTriggers加载触发器:

//<Your other code>
eventTrigger.Actions.Add(invokeCommandAction);

RoutedEventHandler loadedHandler = null;
loadedHandler = new RoutedEventHandler((s, _) =>
 {
     var label = s as Label;
     var triggers = Interaction.GetTriggers(label);
     triggers.Add(eventTrigger);
     label.Loaded -= loadedHandler;
 });
newLabel.AddHandler(FrameworkElement.LoadedEvent, loadedHandler);