У меня есть TreeView
, который связан с иерархической коллекцией сложного типа.Как сделать TreeView предварительным выбором текущего элемента, который является свойством зависимостей элемента управления пользователя
<TreeView Name="treeCategories" SelectedValuePath="{Binding SelectedCategory, RelativeSource={RelativeSource AncestorType=UserControl}}">
<HierarchicalDataTemplate DataType="{x:Type LocalCategories:BaseCategory}" ItemsSource="{Binding Subcategories}">
<TextBlock Text="{Binding DisplayName}" />
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
Иерархический рендеринг теперь работает нормально, но я не могу заставить дерево предварительно выбрать «текущий элемент». Текущий элемент является свойством зависимости от пользовательского элемента управления, определяется как
public BaseCategory SelectedCategory { .. }
Я гарантировал, что это имеет значение, хотя я не уверен на 100%, когда это значение - до или после того, как дерево оказывается? Если это произойдет, то это объяснит проблему.
Я попытался:
SelectedValuePath="{Binding SelectedCategory, RelativeSource={RelativeSource AncestorType=UserControl}}"
и
SelectedValuePath="SelectedCategory"
, но я не могу заставить его работать.
Как сделать TreeView
предварительным выбором текущего элемента? Это свойство зависимостей элемента управления пользователя, в котором определено дерево?
Редактировать
Я имею в виду, может быть, я могу использовать стиль элемента, чтобы проверить, если основной объект элемента не равен моему «выбранного объекта».
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedCategory, RelativeSource={RelativeSource AncestorType=UserControl}}" Value="TreeViewItem.UnderlyingObject">
<Setter Property="IsSelected" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
В приведенных выше утверждениях, как я могу получить доступ к лежащему в основе BaseCategory
объекта TreeViewItem
так, что я могу сделать сравнение и использовать триггера данных?
'SelectedValuePath' служит другой цели (которые вы можете прочитать в его онлайн-документации). Вместо этого используйте 'SelectedItem'. – Clemens
@Clemens, он не имеет доступного setter "_,' Mode = OneWay', похоже, не помогает. –
Извините, забыли, что это свойство readonly в TreeView. [Этот вопрос] (http://stackoverflow.com/q/1000040/1136211) может помочь. – Clemens