wpf treeview选中的项目

时间:2011-10-19 18:19:29

标签: wpf treeview

我有一个树视图:

<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之后的一个地方做这件事 在代码中的多个位置更新。

最好的选择是什么?

1 个答案:

答案 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。但是,这不是我建议的方式。