我想從我的TreeView中獲取選定的項目,但有一些問題。 我正在關注MVVM構架。我的ViewModel包含我的模型中的一個類的集合。所以我用這個集合綁定了TreeView的ItemSource。我想將我的TreeView的selectedItem綁定到綁定集合的一個項目。我怎麼做。這是SelectedItem和IsSelected屬性的代碼。TreeView中的SelectedItem
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,以便我可以將它分配給選定的Item。我怎樣才能讓我的TreeView返回集合中的selectedItem?
據透露,這是我的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 XAML代碼:如果我寫在我的模型上面的代碼中,我得到的一切工作完全正常。但是我不能在Model中正確使用上面的代碼,它必須在VM中。
任何幫助將不勝感激。
感謝
可能的重複http://stackoverflow.com/questions/1000040/selecteditem-in-a-wpf-treeview – Nitesh
我一直在使用附加行爲綁定到我的虛擬機中的ICommand。它很乾淨,但你必須記住,電視SelectedItem是一個只讀屬性,所以虛擬機只能檢查它。 –
我只想讀取selectedItem。我不需要設置它。那麼如何使用附加行爲綁定到虛擬機中的ICommmand? – WAQ