Событие OnExpanded для любого объекта в treeview

Это - просто часть ужасающей путаницы, которая является API даты/времени Java. Список что случилось с ним занял бы очень долгое время (и я уверен, что не знаю половины проблем). По общему признанию рабочий с датами и временем хитро, но aaargh так или иначе.

Делают себе одолжение и используют Время Joda вместо этого, или возможно JSR-310.

РЕДАКТИРОВАНИЕ: Что касается причин, почему - как отмечено в других ответах, это могло произойти из-за старых API C, или просто общего настроения запуска всего от 0... за исключением того, что дни запускаются с 1, конечно. Я сомневаюсь, мог ли кто-либо вне исходной команды внедрения действительно заявить причины - но снова, я буду убеждать читателей не волноваться так [приблизительно 117], почему плохие решения были приняты, чтобы посмотреть на целую палитру злобности в java.util.Calendar и найти что-то лучше.

Одна точка, которая является в пользу использования индексов на основе 0, - то, что оно делает вещи как "массивы имен" легче:

// I "know" there are 12 months
String[] monthNames = new String[12]; // and populate...
String name = monthNames[calendar.get(Calendar.MONTH)];

, Конечно, это перестало работать, как только Вы получаете календарь с 13 месяцами..., но по крайней мере определенный размер является числом месяцев, которые Вы ожидаете.

Это не хорошо причина, но это причина...

РЕДАКТИРОВАНИЕ: Как вид комментария запросов некоторые идеи о том, что я думаю, являются неправильными с Датой/Календарем:

  • Удивительные основания (1900 как год базируются на Дате, по общему признанию для конструкторов устаревших; 0 как основа месяца в обоих)
  • Переменчивость - использование неизменных типов делает очень более простым работать с тем, что действительно эффективно значения
  • недостаточный набор типов: хорошо иметь Date и Calendar как разные вещи, но разделение "локальных" по сравнению с "зонными" значениями отсутствует, как дата/время по сравнению с датой по сравнению со временем
  • API, который приводит к ужасному коду с волшебными константами вместо явно именованных методов
  • API, который очень трудно обосновать о - весь бизнес о том, когда вещи повторно вычисляются и т.д.
  • использование конструкторов без параметров для установки по умолчанию к "теперь", который приводит к твердому к тестовому коду
  • Date.toString() реализация, которая всегда использует системную зону местного времени (это смутило многих пользователей Переполнения стека до настоящего времени)

14
задан Ian Kelling 8 September 2009 в 00:12
поделиться

1 ответ

Вы можете использовать событие TreeViewItem.Expanded в качестве присоединенного события:

<TreeView TreeViewItem.Expanded="TreeViewItem_Expanded"
          ItemsSource="{Binding}">
    ...
</TreeView/>

В коде программной части вы можете идентифицировать TreeViewItem , который инициировал событие, использующее свойство OriginalSource :

    private void TreeViewItem_Expanded(object sender, RoutedEventArgs e)
    {
        TreeViewItem tvi = e.OriginalSource as TreeViewItem;
        if (tvi != null)
        {
            MessageBox.Show(string.Format("TreeNode '{0}' was expanded", tvi.Header));
        }
    }
30
ответ дан 1 December 2019 в 09:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: