Посмотрите на TreeView.SelectedItem Property страницу в MSDN.
Вы можете связать непосредственно к TreeView.SelectedItem
собственности:
<TreeView ItemsSource="{Binding Items}" SelectedItem="{Binding Item, Mode=OneWay}" />
Заметим, что свойство TreeView.SelectedItem
только для чтения только, так что вы должны использовать OneWay
связывания ... это означает, что вы не можете установить выбранный элемент из вашей модели просмотра. Для этого вам нужно будет создать свой собственный двухпозиционный элемент с помощью Attached Property
.
EDIT >>>
Мои извинения @ Scroog1, я обычно используют AttachedProperty
, чтобы сделать это. Вы правы, что даже с привязкой OneWay
с этим методом возникает ошибка. К сожалению, мой код AttachedProperty
длинный, но есть и другой способ сделать это.
я не обязательно рекомендовать, как это никогда не очень хорошая идея, чтобы поместить свойства пользовательского интерфейса в ваших объектов данных, но если добавить IsSelected
свойство к объекту данных, то вы можете привязать его непосредственно к TreeViewItem.IsSelected
собственности:
<TreeView ItemsSource="Items" HorizontalAlignment="Stretch" ... Name="MyTreeViewMenu">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
Я просто искал и нашел «полное» ответ для вас в WPF MVVM TreeView SelectedItem пост здесь на StackOverflow.
Альтернативно, существует другой способ ... вы также можете использовать свойства TreeView.SelectedValue
и TreeView.SelectedValuePath
. Основная идея заключается в том, чтобы установить свойство TreeView.SelectedValuePath
на имя свойства в вашем объекте данных. Когда элемент выбран, свойство TreeView.SelectedValue
будет установлено в значение этого свойства выбранного элемента данных. Дополнительную информацию об этом методе можно найти на странице How to: Use SelectedValue, SelectedValuePath, and SelectedItem в MSDN. Обычно это работает лучше всего, если у вас есть уникально идентифицируемое свойство, такое как идентификатор какого-либо типа. Этот пример кода из MSDN:
<TreeView ItemsSource="{Binding Source={StaticResource myEmployeeData},
XPath=EmployeeInfo}" Name="myTreeView" SelectedValuePath="EmployeeNumber" />
<TextBlock Margin="10">SelectedValuePath: </TextBlock>
<TextBlock Margin="10,0,0,0" Text="{Binding ElementName=myTreeView,
Path=SelectedValuePath}" Foreground="Blue"/>
<TextBlock Margin="10">SelectedValue: </TextBlock>
<TextBlock Margin="10,0,0,0" Text="{Binding ElementName=myTreeView,
Path=SelectedValue}" Foreground="Blue"/>
'TreeViewItem.Selected' является событие не так ли? Как вы используете 'StaticResource' для соответствия' Command' с событием? Кроме того, запрос был для решения MVVM. – Sheridan
@Sheridan Да .. Ответ обновлен. –
Добавлена команда и свойства в моей модели. Хотя команда вызывается при выборе пункта меню, но как получить selectedmenuItem? См. Ниже комментарии. – user2519971