Привязка событий WPF к командам MVVM ViewModel в коде позади View - PullRequest
1 голос
/ 31 августа 2011

Я получил приведенное ниже решение на стороне 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 Ответ

1 голос
/ 31 августа 2011

Не совсем уверен, что это единственный способ, но вы, вероятно, могли бы добавить триггер под нагрузкой, используя 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);
...