簡體   English   中英

在View后面的代碼中將WPF事件綁定到MVVM ViewModel命令

[英]Binding WPF Events to MVVM ViewModel Commands in code behind of View

我在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()
            };

有什么幫助嗎?

在此先感謝,Farzad

不太確定這是否是唯一的方法,但是您可以使用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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM