Придумал решение. Действительно просто:
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsNodeExpanded}">
</Setter>
</Style>
Таким образом, стиль связывает объект с TreeViewItem, смотрит на его атрибут IsNodeExpanded и присваивает это значение свойству TreeViewItem.IsExpanded. Если вы добавите Mode = TwoWay, они будут уведомлять друг друга (TreeViewItem сообщит объекту, когда он был развернут).
Спасибо!