如何在代码隐藏中添加WPF行为

如何在代码隐藏中添加WPF行为,wpf,wpf-controls,Wpf,Wpf Controls,我试图找到一种在代码中添加行为的方法,我能够在XAML中成功地添加它 这就是我将XAML中的行为添加到网格的方式,SelectedItems是行为中的DP,它是视图模型selected items属性的数据绑定。我正在监听grid collection changed事件并更新DP,DP会依次通知所选项目的查看模式 /// <summary> /// Dependency Property SelectedItems /// </summary> public stati

我试图找到一种在代码中添加行为的方法,我能够在XAML中成功地添加它

这就是我将XAML中的行为添加到网格的方式,SelectedItems是行为中的DP,它是视图模型selected items属性的数据绑定。我正在监听grid collection changed事件并更新DP,DP会依次通知所选项目的查看模式

/// <summary>
/// Dependency Property SelectedItems
/// </summary>
public static readonly DependencyProperty SelectedItemsProperty =
        DependencyProperty.Register("SelectedItems", 
        typeof(INotifyCollectionChanged), typeof(MultiSelectBehavior), 
        new PropertyMetadata(null));

AssociatedObject.SelectedItems.CollectionChanged += GridSelectedItems_CollectionChanged;
试试这个:

var multiSelectBehavior = new MultiSelectBehavior();
BindingOperations.SetBinding(multiSelectBehavior, MultiSelectBehavior.SelectedItemsProperty, new Binding("SelectedItems"));
Interaction.GetBehaviors(this.BackupsGrid).Add(multiSelectBehavior);

接受的答案在设计器中似乎不起作用,因为从未引发
onatached
事件。一种在运行时和设计器中都有效的方法是对行为使用
Attach()
方法。在这种情况下,看起来是这样的:

var multiSelectBehavior = new MultiSelectBehavior();
BindingOperations.SetBinding(multiSelectBehavior, MultiSelectBehavior.SelectedItemsProperty, new Binding("SelectedItems"));
multiSelectBehavior.Attach(this.BackupsGrid)

这应该是正确的答案
var multiSelectBehavior = new MultiSelectBehavior();
BindingOperations.SetBinding(multiSelectBehavior, MultiSelectBehavior.SelectedItemsProperty, new Binding("SelectedItems"));
multiSelectBehavior.Attach(this.BackupsGrid)