wpf树视图所选项目
我有一个树视图:wpf树视图所选项目,wpf,treeview,Wpf,Treeview,我有一个树视图: <TreeView> <TreeView.ItemTemplate> <HierarchicalDataTemplate ItemsSource="{Binding Path=TucActivity}"> <TextBlock> <TextBlock.Text> <MultiBinding StringFormat="{}{0} {1}">
<TreeView>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=TucActivity}">
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Path="DisplayedStartTime"></Binding>
<Binding Path="Name"></Binding>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Message}" />
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
每次更新((App)Application.Current).TucOC
时,我都希望这样
所选项目(以及焦点)将是可观察集合中的项目
我想在一个地方做,因为((App)Application.Current).TucOC
是
在代码中的多个位置更新
最好的选择是什么?如果您使用的是这样的开发模式,我会在ViewModel类上创建一个属性,该属性属于ObservableCollection中保存的类型,以保存treeview源的当前选定项。看起来是这样的:
private object _selectedTuc;
public object SelectedTuc
{
get
{
return _selectedTuc;
}
set
{
_selectedTuc = value;
OnPropertyChanged("SelectedTuc");
}
}
然后,在树视图中,将此属性绑定到树视图的SelectedItem:
<TreeView ItemsSource="{Binding TucOC, Mode=OneWay}" SelectedItem="{Binding SelectedTuc, Mode=TwoWay}">...</TreeView>
。。。
请注意,在SelectedItem的绑定上,您指定了一个双向模式值-这允许从UI更新SelectedTuc属性,以及在SelectedTuc属性更改时更新UI
如果您没有使用MVVM或类似的工具,则需要创建一个实用方法,每当ObservableCollection中的选定项或索引发生更改时,该方法都会更新TreeView的SelectedItem。但是,我不建议这样做。您是如何避免此错误的:“SelectedItem”属性是只读的,无法从标记中设置。此问题已回答多次,并且
<TreeView ItemsSource="{Binding TucOC, Mode=OneWay}" SelectedItem="{Binding SelectedTuc, Mode=TwoWay}">...</TreeView>