Как я могу поместить Silverlight 3 DataGridCell в режим редактирования в коде?

Я хочу смочь выбрать определенную ячейку в Silverlight 3.0 DataGrid и поместить его в режим редактирования. Я могу использовать VisualTreeManager для определения местоположения ячейки. Как я переключаюсь на режим редактирования?

Каждый DataGridCell похож на это в VisualTreeManager:

          System.Windows.Controls.DataGridCell
            System.Windows.Controls.Grid
              System.Windows.Shapes.Rectangle
              System.Windows.Controls.ContentPresenter
                System.Windows.Controls.TextBlock
              System.Windows.Shapes.Rectangle
              System.Windows.Shapes.Rectangle

с TextBlock, содержащим текст, я хочу отредактировать.

Обновление

После @AnthonyWJones' предложения вот то, как я пытался сделать это использование BeginEdit ().

Я хотел сохранить это простым, таким образом, я думал, что выберу столбец в первой строке. Даже это доказало вне моего знания SL! В конце я получаю первую строку путем создания поля, названного firstRow для содержания его:

private DataGridRow firstRow;

добавленный обработчик LoadingRow к DataGrid:

LoadingRow="computersDataGrid_LoadingRow"

и

private void computersDataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
    if (this.firstRow == null)
        this.firstRow = e.Row;
}

и затем добавляя кнопку к панели для инициирования редактирования:

private void Button_Click(object sender, RoutedEventArgs e)
{
    this.dataGrid.SelectedItem = this.firstRow;
    this.dataGrid.CurrentColumn = this.dataGrid.Columns[4];
    this.dataGrid.BeginEdit();
}

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

6
задан ssg31415926 26 January 2010 в 14:57
поделиться

2 ответа

Я не могу правильно понять вашу проблему, но у меня была похожая проблема

, которую я хотел заработать только несколько клеток сетки, редактируемые и остальные не были. Вместо того, чтобы создавать логику и назначение доступным как True / false, я проделал простую вещь.

  • Отметьте клетки всей сетки пишется, ISREADONLY как FALSE
  • Установите событие PORTINGCELLFOLFOREDIT и отправьте обратный вызов
  • , когда вы дважды щелкните соты, он получает В режиме редактирования
  • проверьте, хотите ли эта ячейка быть редактируемым
  • , если она может быть отредактирована, продолжайте редактировать
  • , если эта ячейка готовится, то вызовите ConficeDit

идет как

namespace foo
{
    public class foobar
    {
        public foobar()
        {
            sampleGrid = new DataGrid();
            sampleGrid.IsReadOnly = false;
            sampleGrid.PreparingCellForEdit += new EventHandler<DataGridPreparingCellForEditEventArgs>(sampleGrid_PreparingCellForEdit);
        }

        void sampleGrid_PreparingCellForEdit(object sender, DataGridsampleGrid_PreparingCellForEditEventArgs e)
        {
            if (sampleGrid.SelectedItem != null)
            {
                bool isWritableField = CheckIfWritable()

                if (isWritableField == false)
                {
                    sampleGrid.CancelEdit();
                }

                // continue with your logic
            }
        }

        private DataGrid sampleGrid;
    }
}
0
ответ дан 17 December 2019 в 20:32
поделиться

Я не уверен, зачем вам нужно искать DataGridCell с помощью VisualTreeManager, и в настоящее время я не знаю, как правильно начать редактирование. Вы можете уйти, просто установив визуальное состояние ячейки на редактирование.

 VisualStateManager.GoToState(myDataGridCell, "Editing", true);

Я не уверен, как ведет себя сетка, когда вы делаете что-то подобное вышеупомянутому. Вам может показаться, что все идет немного грубо, если вам понадобится DataGrid, чтобы помочь вам вернуть изменения в строку.

Стандартным подходом было бы установить свойство DataGrid SelectedItem для элемента, представленного строкой, установить свойство CurrrentColum для DataGridColumn объект, представляющий столбец, в котором находится ячейка. Затем вызовите метод BeginEdit .

2
ответ дан 17 December 2019 в 20:32
поделиться
Другие вопросы по тегам:

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