Как ViewModel может управлять ControlTemplate? - PullRequest
0 голосов
/ 23 февраля 2010

У меня проблема в том, что части элемента управления TreeView необходимо менять в зависимости от состояния связанных (ItemsSource) ViewModels. Например, маленький значок расширителя необходимо заменить другим рисунком в зависимости от состояния каждой модели ViewModel. В зависимости от состояния каждой ViewModel, дочерние элементы должны располагаться горизонтально, а не по умолчанию по вертикали.

1 Ответ

1 голос
/ 23 февраля 2010

Похоже, вы должны настроить ItemsContainerStyle , а не ControlTemplate. Например, если вы хотите пометить TreeViewItem как выбранный, когда выбран базовый ViewModel, вы можете использовать следующий стиль:

<TreeView ItemsSource="{Binding ...}
          ...>
 <TreeView.ItemContainerStyle>
   <Style TargetType="{x:Type TreeViewItem}">
     <!-- IsSelected is a property on ViewModel item -->
     <Setter Property="IsSelected" Value="{Binding IsSelected}"/>
     <Setter .../>
   </Style>
 </TreeView.ItemContainerStyle>
</TreeView>

Если Binding вам не подходит, вы можете использовать Преобразователи , Триггеры в Style или ControlTemplate. Кроме того, вы также можете использовать триггеры в шаблонах данных.

PS: написал код с головы. Может быть опечатка.

...