Я пытаюсь получить выбранный элемент из моего TreeView, но с некоторой проблемой. Я следую за MVVM archetecture. My ViewModel содержит коллекцию класса, который находится в моей модели. Поэтому я привязал ItemSource TreeView к этой коллекции. Я хочу привязать выбранный элемент моего TreeView к элементу привязанной коллекции. Как это сделать. Вот код для SelectedItem и IsSelected Property.SelectedItem в TreeView
private static sourceData _selectedItem = null;
/// <summary>
/// Selected Item in the tree
/// </summary>
public static sourceData SelectedItem
{
get { return _selectedItem; }
set
{
if (_selectedItem != value)
{
_selectedItem = value;
}
}
}
private bool _isSelected;
/// <summary>
/// Get/Set for Selected node
/// </summary>
public bool IsSelected
{
get { return _isSelected; }
set
{
if (_isSelected != value)
{
_isSelected = value;
if (_isSelected)
{
SelectedItem = this;
OnPropertyChanged("IsSelected");
}
}
}
}
/// <summary>
/// Property changed event
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Property changed event handler
/// </summary>
/// <param name="propertyName"></param>
protected virtual void OnPropertyChanged(string propertyName)
{
var handler = this.PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
Когда я отладки это, внутр SelectedItem = this;
«это» указатель содержит коллекцию, к которой переплетены мой TreeView. Мне нужно было иметь SelectedDataSource, чтобы я мог назначить его выбранному элементу. Как я могу заставить TreeView вернуть мне выбранный элемент в коллекции?
FYI, это мой XAML код для TreeView
<TreeView Margin="5,0,0,0" ItemsSource="{Binding SourceData}" Width="390">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding DataContext.IsSelected, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu Name="contextMenu" DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}" >
<MenuItem Name="menuItem" Header="Rename" Command="{Binding RenameCommand}" />
</ContextMenu>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
</Trigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
P.S: Если я пишу код выше в моей модели, я получаю все работает прекрасно. Но я не могу изменить вышеуказанный код в модели, он должен быть в виртуальной машине.
Любая помощь будет очень признательна.
Благодаря
Возможный дубликат http://stackoverflow.com/questions/1000040/selecteditem-in-a-wpf-treeview – Nitesh
Я использую Attached Behavior для привязки к ICommand в моей виртуальной машине. Он чист, но вы должны помнить, что TV SelectedItem является свойством readonly, поэтому виртуальная машина может только проверить его. –
Я только хочу прочитать SelectedItem. Мне не нужно его устанавливать. Итак, как вы используете Attached поведение для привязки к ICommmand в VM? – WAQ