2011-08-31 60 views
1

我得到了下面的解決方案在XAML方面綁定一個事件命令和它工作得很好綁定WPF事件MVVM ViewModel命令在代碼後面的視圖

參考

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

不太清楚,如果這是唯一的方法,但你很可能使用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);