Beispiel #1
0
        private void OnHrvmIsSelectedChanged(ShortHealthRecordViewModel hrvm)
        {
            // simulate IsSynchronizedWithCurrentItem for Extended mode
            // SelectedHealthRecord points to last IsSelected without unselect prev
            // select may be by IsSelected (rect), so need to set SelectedHealthRecord
            if (hrvm.IsSelected)
            {
                if (!selectedOrder.Contains(hrvm))
                {
                    selectedOrder.Add(hrvm);
                }
                else
                {
                    logger.DebugFormat("selectedOrder contains {0}", hrvm);
                }

                using (unselectPrev.Join())
                {
                    if (SelectedHealthRecords.Count() > 1)
                    {
                        // dont's notify SelectedChanged to save selection
                        using (doNotNotifySelectedChanged.Join())
                        {
                            SelectedHealthRecord = hrvm;
                        }
                    }
                    else
                    {
                        SelectedHealthRecord = hrvm;
                    }
                }
                //logger.DebugFormat("select {0}", hrvm);
            }
            else if (!inRemoveDup)
            {
                selectedOrder.Remove(hrvm);
                //logger.DebugFormat("unselect {0}", hrvm);

                // Сняли выделение, фокус остался — enter будет открывать этот элемент, а выделен другой. Это ок.
                // Выбранным становится последний.

                if (SelectedHealthRecord == hrvm)
                {
                    using (doNotNotifySelectedChanged.Join())
                    {
                        SelectedHealthRecord = LastSelected;
                    }
                }
            }
            if (doNotNotifyLastSelectedChanged.CanEnter)
            {
                OnPropertyChanged(() => LastSelected);
                //logger.DebugFormat("selected in order\n{0}", string.Join("\n", selectedOrder));
            }
        }
Beispiel #2
0
        /// <summary>
        /// Индекс текущей записи в представлении при переупорядочивании.
        /// </summary>
        /// <param name="up">Направление перемещения записей</param>
        /// <returns></returns>
        internal int GetCurrentSelectedIndex(bool up)
        {
            var viewList        = view.Cast <ShortHealthRecordViewModel>().ToList();
            var selectedIndexes = SelectedHealthRecords.Select(v => viewList.IndexOf(v));
            var allNear         = selectedIndexes.OrderBy(x => x).IsSequential();

            int current;

            if (allNear)
            {
                current = up ? selectedIndexes.Min() : selectedIndexes.Max(); // ближайшая по направлению перемещения
            }
            else
            {
                current = viewList.IndexOf(SelectedHealthRecord); // первая запись
            }
            return(current);
        }