WPF DataGrid - шаблон переключения между режимом просмотра и режимом редактирования. - PullRequest
4 голосов
/ 03 июня 2009

Если есть WPF DataGrid слева от окна с областью справа для отображения выбранной записи. Выбранная запись состоит из Textbox и ComboBox, которые отключены до нажатия кнопки редактирования. Все работает как положено.

Тем не менее, кажется немного неуклюже заполнять ComboBox es при изменении SelectedItem из DataGrid. Можно использовать намного более легкий элемент управления, например TextBlock, пока не будет нажата кнопка «Редактировать», тогда TextBlock s можно отключить для ComboBox es.

Я уверен, что это можно сделать с помощью какого-то шаблона, но когда я попытался поэкспериментировать с этим, все события, связанные с ComboBox, сообщают об ошибке, поскольку их больше нет, так как были заменены на TextBlocks в «режиме просмотра».

Я, вероятно, ошибаюсь, поэтому некоторые рекомендации будут оценены.

Ответы [ 3 ]

3 голосов
/ 12 июня 2009

здесь отлично статья

Чтобы применить редактирование одним щелчком ко всем ячейкам в DataGrid

  1. Вставьте приведенный ниже стиль в ресурсы вашей DataGrid
  2. Вставьте метод в код позади

Чтобы применить редактирование одним щелчком только к определенным ячейкам в DataGrid

  1. Установить x: ключ стиля (напр.)
  2. Вставьте стиль в ресурсы вашей DataGrid
  3. Примените стиль к свойству CellStyle столбцов, которые вы хотите редактировать одним кликом (например)
  4. Вставьте метод в код позади

    //
    // SINGLE CLICK EDITING
    //
    private void DataGridCell_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        DataGridCell cell = sender as DataGridCell;
        if (cell != null && !cell.IsEditing && !cell.IsReadOnly)
        {
            if (!cell.IsFocused)
            {
                cell.Focus();
            }
            DataGrid dataGrid = FindVisualParent<DataGrid>(cell);
            if (dataGrid != null)
            {
                if (dataGrid.SelectionUnit != DataGridSelectionUnit.FullRow)
                {
                    if (!cell.IsSelected)
                        cell.IsSelected = true;
                }
                else
                {
                    DataGridRow row = FindVisualParent<DataGridRow>(cell);
                    if (row != null && !row.IsSelected)
                    {
                        row.IsSelected = true;
                    }
                }
            }
        }
    }    
    
    static T FindVisualParent<T>(UIElement element) where T : UIElement
    {
        UIElement parent = element;
        while (parent != null)
        {
            T correctlyTyped = parent as T;
            if (correctlyTyped != null)
            {
                return correctlyTyped;
            }
    
            parent = VisualTreeHelper.GetParent(parent) as UIElement;
        }
        return null;
    } 
    
1 голос
/ 04 июня 2009

Свойство ContentTemplateSelector должно позволять вам выбирать тот или иной шаблон в зависимости от текущего режима (просмотр / редактирование)

0 голосов
/ 16 декабря 2012

Помеченная ссылка для ответа не работает.

Это может помочь вместо: http://wpf.codeplex.com/wikipage?title=Single-Click%20Editing

...