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);
}
}