在代码隐藏中附加行为

本文关键字:代码 隐藏 | 更新日期: 2023-09-27 18:33:11

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

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

由于这是在 PropertyGrid 中动态加载的编辑器上,因此我只是要创建一个从代码隐藏绑定的编辑器实例,而不必使用非常短且仅包含一个编辑器的不同 xaml 文件。

或者,简单地重新实现 Behavior 中的所有代码并在我在代码隐藏中创建编辑器时调用它会更容易吗?

在代码隐藏中附加行为

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

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

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