如何在后面的代码中添加WPF行为
问题描述:
我试图找到一种方法在代码中添加行为,我可以在XAML中成功添加它。如何在后面的代码中添加WPF行为
这是我如何将XAML中的行为添加到网格中,SelectedItems是行为中的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;
<i:Interaction.Behaviors>
<behaviors:MultiSelectBehavior SelectedItems="{Binding SelectedItems}"/>
</i:Interaction.Behaviors>
我需要的是背后在代码中创建这种行为的视图模式。我在包含网格的窗口的构造函数中执行此操作,但它不起作用,viewmodel selected items属性未得到更新。
var multiSelectBehavior = new MultiSelectBehaviorSingleton();
BindingOperations.SetBinding(this.BackupsGrid, MultiSelectBehavior.SelectedItemsProperty,
new Binding()
{
Source = this.DataContext,
Path = new PropertyPath("SelectedItems"),
Mode = BindingMode.OneWay
});
Interaction.GetBehaviors(this.BackupsGrid).Add(multiSelectBehavior);
答
试试这个:
var multiSelectBehavior = new MultiSelectBehavior();
BindingOperations.SetBinding(multiSelectBehavior, MultiSelectBehavior.SelectedItemsProperty, new Binding("SelectedItems"));
Interaction.GetBehaviors(this.BackupsGrid).Add(multiSelectBehavior);
@vikasmittal:请记得投了有用的答案:) https://stackoverflow.com/help/someone-answers – mm8