Это немного сложно объяснить, но скажем, у меня есть такая иерархия для списка флажков:

->Элемент А
---->Элемент 1
---->Элемент 2
->Элемент Б
---->Элемент 3
----> Пункт 4

Мне нужно иметь возможность охватить оба этих случая:

  • Выберите элемент A и элемент B, чтобы увидеть диаграмму с данными для элемента A и элемента B.
  • Выберите элемент A, элемент 2, элемент 4 и т. д., чтобы увидеть диаграмму с данными для элемента A, элемента 2, элемента 4 и т. д.

В настоящее время это работает так, что вы можете установить каждый флажок отдельно и получить желаемое поведение. Однако это нарушает то, как все ожидают, что флажки будут работать, потому что мы не проверяем автоматически всех дочерних элементов, когда проверяется родитель. Это также заставляет вас вручную проверять дочерние элементы, если вы этого хотите.

Итак, мой вопрос заключается в том, как я могу иметь иерархию флажков, которая работает так, как ожидают пользователи (дети проверяются, когда родитель), и по-прежнему охватывает случай, когда родитель функционирует как отдельный объект.

Я думаю, мне понадобится какой-то дополнительный вариант клика? Ищу любые идеи.

Заранее спасибо.

1
Monomeeth 11 Июн 2016 в 02:03

6 ответов

Как правило, при использовании иерархического дерева (даже одного уровня в глубину) можно моделировать два сценария.

Либо верхний уровень является «родителем» для «дочерних элементов», либо верхний уровень является просто удобным «группировщиком» для элементов под ним.

В любом сценарии есть неотъемлемое ожидание, если вы предоставите флажок верхнего уровня, который выберет все дочерние элементы под ним... Поскольку он обертывает другие элементы.

Я не знаю, что у вас за предметы, но я буду использовать некоторые примеры данных ниже, чтобы объяснить:

[_] Fruit
      [_] Banana
      [_] Kiwi
      [_] Pear
[_] Vegetables
      [_] Carrot
      [_] Eggplant
      [_] Potato

Я ожидаю, что с этим деревом я смогу выбрать любую комбинацию отдельных предметов (например, Банан, Груша, Картофель)... И/или я могу выбрать группу высокого уровня, такую ​​как Фрукты, и она выберет все элементы внутри нее.

В хорошо построенном пользовательском интерфейсе я ожидаю, что если все дочерние элементы будут проверены, соответствующий родитель также будет проверен, чтобы обеспечить правильное визуальное состояние.

В моем примере не имеет смысла выбирать «Овощи» И Картофель, поскольку выбор категории «Овощи» логически включает Картофель.

Похоже, вы пытаетесь разрешить этот последний сценарий, но я бы сказал, что это не имеет смысла. Однако я не знаю, какой у вас набор данных, поэтому было бы очень полезно это знать. Вы можете обнаружить, что ваш сценарий имеет смысл, но на самом деле это не иерархия, и поэтому он должен быть структурирован по-другому?... Но нам нужно увидеть фактические элементы, чтобы сделать правильный выбор.

1
scunliffe 11 Июн 2016 в 03:05
Я согласен с тем, что вы говорите. Однако мне нужно поддерживать этот сценарий для этого конкретного набора данных. Элементы — это места, поэтому родители — регионы, а дети — города. Пользователь должен иметь возможность просматривать данные по отдельным городам, а также сводные данные по регионам. И это допустимый случай для сравнения данных по региону с данными по городу (стоит отметить, что некоторые данные, которые мы рассматриваем, представлены в процентах, а не в абсолютных суммах, поэтому такое сравнение определенно имеет смысл). Кажется, что флажки не могут быть правильным решением?
 – 
vee
15 Июн 2016 в 00:53

Трехсторонний флажок может быть тем, что вы ищете. Несколько программ установки работают таким образом, когда вы выбираете пользовательские программные компоненты, которые вам нужны. Установленный флажок Node означает, что проверяется все поддерево. С другой стороны, флажок не отмечен = все поддерево не отмечено. Если отмечена только часть поддерева, то флажок находится в каком-то третьем состоянии.

0
Wojciech Kozaczewski 8 Июн 2016 в 22:46
Я посмотрел на 3-состояние, и я не думаю, что это решит эту проблему. При этом не учитывается, что родительский элемент является собственной сущностью. Третье состояние просто указывает на то, что проверены некоторые, но не все дочерние элементы. Что мне нужно, так это какой-то способ проверить родителя как отдельный выбранный элемент, не обращая внимания на его дочерние элементы. Я думаю, мне понадобится какой-то вторичный ввод, или, возможно, флажки даже не являются правильным способом справиться с этим.
 – 
vee
9 Июн 2016 в 00:30

Решение может состоять в том, чтобы отображать только родительские параметры в начале, а когда пользователь выбирает параметр, отображать подэлементы с сообщением/вопросом выше (или справа от родительского параметра), которые поясняют действие «Вам нужно включить это варианты тоже по вашему выбору?"

0
Madalina Taina 9 Окт 2016 в 16:04

Обычно состояние флажка родителя говорит: «[все/некоторые] из моих детей [выбраны/не выбраны]» и ничего более.

Флажок вашего родителя говорит другое: он ничего не говорит о своих дочерних элементах, а говорит: «Выбрано сводка моих дочерних элементов».

Другими словами, вы заменили обычную функцию родительского флажка другой дискретной опцией: «также включить сводку дочерних элементов».

Зная это, я бы сказал, что вам следует поэкспериментировать с макетами, которые позволят вам добавить эту опцию в виде отдельного флажка. Например, заимствование аналогии с продуктом из другого ответа:

[X] Fruits (total)
[-] Fruits
    [_] Apples
    [X] Oranges
    [_] Grapes
[_] Vegetables (total)
[X] Vegetables
    [X] Carrots
    [X] Onions
    [X] Potatoes
0
Nate Green 9 Ноя 2016 в 21:50

Как насчет выбираемого TreeView, имеющего три состояния проверки для каждого элемента (отмечено, не отмечено, неопределенный)?

Его использование также даст вам возможность расширять и сворачивать поддеревья элементов...

-1
Vladimir Georgiev 10 Авг 2016 в 11:59

enter image description here

Надеюсь, это поможет лучше объяснить мой ответ, вам нужно показать разные состояния для «ВЫБЕРИТЕ ВСЕ» и «ВЫБЕРИТЕ ОДИН ИЗ...»

Как вы можете видеть, я ВЫБИРАЮ ВСЕ элемент A, поэтому он показывает полный флажок, но в элементе B я выбираю только элемент 4. поэтому в элементе B он показывает пустой флажок

-1
dannyrizal 10 Ноя 2016 в 06:44
Добро пожаловать на сайт, @danny. Ваш пост, по-видимому, не отвечает на вопрос исходного постера о том, как выбрать только родителя, чтобы отобразить для него диаграмму, а также сохранить ожидания пользователей в отношении автоматического выбора дочерних элементов при выборе родителя. Вы можете отредактировать его, чтобы уточнить это.
 – 
Graham Herrli
10 Ноя 2016 в 08:04