Attach behavior in code behind
Asked Answered
I

2

10

I have the following Xaml that is used in a user control that used as an editor inside a property grid. The question is, what would the c# look like to attach a behavior from the code behind?

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

Since this is on an editor that is loaded dynamically in a PropertyGrid, I was just going to create an instance of the editor with binding from code behind rather than having to have different xaml files that are really short and just contain one editor.

Or would it be easier to simply re implement all of the code that is in the Behavior and call it while I'm creating the editor in the code behind?

Idyllist answered 2/5, 2012 at 22:7 Comment(1)
Isn't behaviors just an ItemCollection? If so, just use myInteraction.Behaviors.Add(new XamComboEditorSelectedItemsBehavior { // set props });Dorthydortmund
M
25
XamComboEditorSelectedItemsBehavior behavior = new XamComboEditorSelectedItemsBehavior();
behavior.SetBinding(XamComboEditorSelectedItemsBehavior.SelectedItemsProperty, new Binding() 
    { 
        ElementName = "_uc", 
        Path = new PropertyPath("SelectedItems"), 
        Mode = BindingMode.TwoWay 
    });
Interaction.GetBehaviors(yourElementName).Add(behavior)
Mawkish answered 3/5, 2012 at 7:22 Comment(1)
I didn't find any SetBinding method directly on the behavior. Instead I had to use BindingOperations.SetBinding()Scrabble
T
2

The accepted answer does not appear to work in the designer, because the OnAttached event is never raised. An approach that works at runtime and also in the designer is using the Attach() method on the behavior. In this case, that would look like this:

XamComboEditorSelectedItemsBehavior behavior = new XamComboEditorSelectedItemsBehavior();
behavior.SetBinding(XamComboEditorSelectedItemsBehavior.SelectedItemsProperty, new Binding() 
    { 
        ElementName = "_uc", 
        Path = new PropertyPath("SelectedItems"), 
        Mode = BindingMode.TwoWay 
    });
multiSelectBehavior.Attach(yourElementName)
Theory answered 3/12, 2020 at 15:17 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.