WPF Expander IsExpanded binding WPF Expander IsExpanded binding wpf wpf

WPF Expander IsExpanded binding


If you remove Mode=OneWay does that fix the problem?

Upon reading your other CTQ (changes to the GUI do not affect the model), I don't have a good suggestion for how to limit the change being seen by the underlying data. What is the difference in:

myModel.MyProperty = true; // in *your* code behind

And

myModel.MyProperty = true; // done by a binding


What caught me out here is that IsExpanded is OneWay by default, so

<Style TargetType="TreeViewItem">    <Setter Property="IsExpanded" Value="{Binding Expanded}"/></Style>

doesn't work the way I expected. Only if you add Mode=TwoWay, then it works (i.e. the item starts paying attention to my Expanded property, and updating it), as in

<Style TargetType="TreeViewItem">    <Setter Property="IsExpanded" Value="{Binding Expanded, Mode=TwoWay}"/></Style>


With Silverlight I do this:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"<Expander Name="pExpander" IsExpanded="True" Header="Preview">    <i:Interaction.Triggers>        <ei:PropertyChangedTrigger Binding="{Binding ShowPreview, Mode=OneWay}">            <ei:ChangePropertyAction PropertyName="IsExpanded" Value="{Binding ShowPreview, Mode=OneWay}"/>        </ei:PropertyChangedTrigger>    </i:Interaction.Triggers>    <TextBlock Text="{Binding Path=Message, Mode=OneWay}"></TextBlock>    </Expander><Expander Name="pExpander1" IsExpanded="True" Header="Preview 1">    <i:Interaction.Triggers>        <ei:PropertyChangedTrigger Binding="{Binding ShowPreview, Mode=OneWay}">            <ei:ChangePropertyAction PropertyName="IsExpanded" Value="{Binding ShowPreview, Mode=OneWay}"/>        </ei:PropertyChangedTrigger>    </i:Interaction.Triggers>    <TextBlock Text="{Binding Path=Message1, Mode=OneWay}"></TextBlock>    </Expander>//...

The binding is not lost when you manualy expand/collapse one Expander...