TreeView: виртуальная машина дочернего узла подвержена влиянию родительского выбора - PullRequest
0 голосов
/ 16 ноября 2018

Что не так со следующей настройкой TreeView?Установка свойства selected виртуальной машины родительского узла переключает свойство selected дочернего узла.

<TreeView ItemsSource="{Binding Documents}">
  <TreeView.ItemContainerStyle>
    <Style TargetType="TreeViewItem">
      <Setter Property="IsExpanded" Value="True" />
      <Setter Property="IsSelected" Value="{Binding selected}" />
    </Style>
  </TreeView.ItemContainerStyle>

  <TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding descriptions}">
      <HierarchicalDataTemplate.ItemContainerStyle>
        <Style TargetType="TreeViewItem">
          <Setter Property="IsSelected" Value="{Binding selected}" />
        </Style>
      </HierarchicalDataTemplate.ItemContainerStyle>
      <HierarchicalDataTemplate.ItemTemplate>
        <DataTemplate>
          <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding name}" />
          </StackPanel>
        </DataTemplate>
      </HierarchicalDataTemplate.ItemTemplate>
        <TextBlock Text="{Binding name}" />
      </StackPanel>
    </HierarchicalDataTemplate>
  </TreeView.ItemTemplate>
</TreeView>

Объекты виртуальной машины выглядят так:

public class DocumentVM : ObservableObject
{
    private string _name;
    public string name
    {
      get { return _name; }
      set { Set(ref _name, value); }
    }

    private bool _selected = false;
    public bool selected
    {
      get { return _selected; }
      set { Set(ref _selected, value); }
    }
}

DescriptionVM очень похоже.

Так, например, если я запускаю следующие две строки:

MyVM.Documents[1].descriptions[0].selected = true;
MyVM.Documents[1].selected = true;

Первая строка устанавливает выбранный первый дочерний элемент второго документа, тогда как вторая строка устанавливает первый узел документа для выбора, но устанавливает для первого потомка второго документа невыбранный .Я уверен, что это что-то не так с шаблонами данных, которые я там использую, но не могу понять, что это такое.

1 Ответ

0 голосов
/ 16 ноября 2018

По умолчанию WPF TreeView не поддерживает множественный выбор, поэтому второй выбор автоматически отменит выбор первого элемента.

Есть способы справиться с этим - посмотрите этот ответ .

...