wpf treeview выбранный элемент - PullRequest
       2

wpf treeview выбранный элемент

0 голосов
/ 19 октября 2011

У меня есть дерево:

<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>

привязано к объекту "Наблюдаемая коллекция":

MainTreeView.ItemsSource = ((App)Application.Current).TucOC;

Я хочу, чтобы каждый раз, когда ((App)Application.Current).TucOC обновлялся выбранный предмет (а также фокус) будет тем из наблюдаемой коллекции.

Я хотел бы сделать это в одном месте, так как ((App)Application.Current).TucOC обновлено в нескольких местах кода.

Какой лучший вариант сделать это?

1 Ответ

0 голосов
/ 19 октября 2011

Если вы используете шаблон разработки, такой как 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, которую вы указываете Modeзначение TwoWay - это позволяет обновлять свойство SelectedTuc из пользовательского интерфейса, а также обновлять пользовательский интерфейс при каждом изменении свойства SelectedTuc.

Если вы не используете MVVM или что-то подобное, вы 'Нам понадобится создать служебный метод, который будет обновлять SelectedItem TreeView каждый раз, когда изменяется выбранный элемент или индекс в ObservableCollection.Однако я не рекомендую это делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...