在后面的代码中附加行为

时间:2012-05-02 22:07:51

标签: c# wpf xaml mvvm code-behind

我有一个用户控件中使用的Xaml,用作属性网格中的编辑器。问题是,c#从后面的代码中附加行为会是什么样的?

<i:Interaction.Behaviors>
    <igExt:XamComboEditorSelectedItemsBehavior SelectedItems="{Binding SelectedItems, ElementName=_uc}"/>
</i:Interaction.Behaviors>

由于这是在一个动态加载到PropertyGrid中的编辑器上,我只是要创建一个编辑器实例,其中包含来自代码的绑定,而不是必须拥有非常简短且只包含一个编辑器的不同xaml文件

或者更简单地重新实现Behavior中的所有代码并在我在后面的代码中创建编辑器时调用它?

2 个答案:

答案 0 :(得分:17)

XamComboEditorSelectedItemsBehavior behavior = new XamComboEditorSelectedItemsBehavior();
behavior.SetBinding(XamComboEditorSelectedItemsBehavior.SelectedItemsProperty, new Binding() 
    { 
        ElementName = "_uc", 
        Path = new PropertyPath("SelectedItems"), 
        Mode = BindingMode.TwoWay 
    });
Interaction.GetBehaviors(yourElementName).Add(behavior)

答案 1 :(得分:0)

接受的答案在设计器中似乎不起作用,因为从未引发OnAttached事件。一种在运行时以及设计器中均可使用的方法是对行为使用Attach()方法。在这种情况下,将如下所示:

XamComboEditorSelectedItemsBehavior behavior = new XamComboEditorSelectedItemsBehavior();
behavior.SetBinding(XamComboEditorSelectedItemsBehavior.SelectedItemsProperty, new Binding() 
    { 
        ElementName = "_uc", 
        Path = new PropertyPath("SelectedItems"), 
        Mode = BindingMode.TwoWay 
    });
multiSelectBehavior.Attach(yourElementName)