我有一个树视图:
<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>
与Observable Collection对象绑定:
MainTreeView.ItemsSource = ((App)Application.Current).TucOC;
每次((App)Application.Current).TucOC
更新时我都希望这样
所选项目(以及焦点)将是可观察集合中的项目。
我想在((App)Application.Current).TucOC
之后的一个地方做这件事
在代码中的多个位置更新。
最好的选择是什么?
答案 0 :(得分:-6)
如果您正在使用像MVVM这样的开发模式,我会在您的ViewModel类上创建一个属性,该属性是ObservableCollection中保存的类型,用于保存树视图源的当前选定项。这看起来像这样:
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绑定的注意事项,您指定ModeWay值为TwoWay - 这允许您从UI更新SelectedTuc属性,以及每当SelectedTuc属性更改时更新的UI。
如果您没有使用MVVM或类似的东西,您将需要创建一个实用程序方法,每当ObservableCollection中的选定项目或索引发生更改时,该方法将更新TreeView的SelectedItem。但是,这不是我建议的方式。