より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

WPFのTreeViewのIsExpandedがViewModelに反映されない

WPFのTreeViewですが、ツリーのノードを開いた状態を扱うプロパティはIsExpandedです。

このプロパティ、どうしてBindingしているのに、コントロールの状態が ViewModelに反映されないんだろうとハマっていました。

ViewModel側からプロパティを変更すると、コントロールの状態には反映されるんですが。

調べると、Binding Modeの指定が必要でした。

<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}"
        BasedOn="{StaticResource {x:Type TreeViewItem}}">
        <Setter Property="IsExpanded" Value="{Binding IsExpanded.Value, Mode=TwoWay}" />
    </Style>
</TreeView.ItemContainerStyle>

UpdateSourceTriggerといい、このあたりのデフォルトの値はまだまだ慣れないとダメですね。