behavior是trigger的高级用法,能更加灵活的处理事件,主要是能灵活的获得页面中的元素。它需要一个起点来使this.AssociatedObject有值
xmlns:Interactivity="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:MyInteractivity="clr-namespace:xxxxxxxxxx.xxxxxxxx.Interactivities"
<Interactivity:Interaction.Behaviors>
< MyInteractivity : LookupIssuerBehavior > < Interactivity : Interaction.Triggers > < Interactivity : EventTrigger SourceName =" LayoutRoot" EventName ="GotFocus"> < Interactivity : InvokeCommandAction CommandName ="GotFocusCommand" /> </ Interactivity : EventTrigger > </ Interactivity : Interaction.Triggers > </ MyInteractivity : LookupIssuerBehavior > </ Interactivity : Interaction.Behaviors >using System.Windows.Interactivity;
///
<summary> /// LookupIssuer Behavior /// </summary> public class LookupIssuerBehavior : Behavior<UserControl>{
public LookupIssuerBehavior(){
}
void AssociatedObjectKeyDown(object sender, KeyEventArgs e){
if (e.Key == Key.Enter){
var viewModel = this.AssociatedObject.DataContext as DataModels.IssuerViewModels.LookupIssuerViewModel;viewModel.Search();
}
}
void tbxBusinessDomainOwnerKeyUpProcess(object sender, KeyEventArgs e){
LookupIssuerViewModel viewModel = this.AssociatedObject.DataContext as LookupIssuerViewModel;viewModel.BusinessDomainOwner = (sender
as TextBox).Text;}
protected override void OnAttached(){
base.OnAttached(); this.AssociatedObject.Loaded += new RoutedEventHandler(AssociatedObjectLoaded);}
void AssociatedObjectLoaded(object sender, RoutedEventArgs e){
this.AssociatedObject.KeyDown += new KeyEventHandler(AssociatedObjectKeyDown); TextBox tbxBusinessDomainOwner = this.AssociatedObject.FindName("tbxBusinessDomainOwner") as TextBox;tbxBusinessDomainOwner.KeyUp +=
new KeyEventHandler(tbxBusinessDomainOwnerKeyUpProcess);}
protected override void OnDetaching(){
base.OnDetaching(); this.AssociatedObject.Loaded -= new RoutedEventHandler(AssociatedObjectLoaded);}
}