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...