Получить значение из пользовательского элемента управления в DataGridTemplateColumn - PullRequest
0 голосов
/ 20 декабря 2018

Я изменяю устаревший код, который использует Grid_CellEditEnding - Я изменил сетку, чтобы использовать пользовательский элемент управления:

  <DataGridTemplateColumn x:Name="cellQty" Header="Qty" Width="1.1*">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Resources:NumericTextColumn  Text="{Binding Qty}"  >
                                </Resources:NumericTextColumn>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                        <DataGridTemplateColumn.CellEditingTemplate>
                            <DataTemplate>
                                <Resources:NumericTextColumn  Text="{Binding Qty}"  >
                                </Resources:NumericTextColumn>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellEditingTemplate>
                    </DataGridTemplateColumn>

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

 private void Grid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
        {
                if(e.Column.Header.ToString().Equals("Qty"))
                { 
                   //this is in error             
                 var newQuantityText = ((NumericTextColumn)e.EditingElement).Text; 
                }

        }

1 Ответ

0 голосов
/ 20 декабря 2018

Я использовал DataContext Свойство строки и произвел преобразование с Типом класса, чтобы получить Свойство.Вместо класса данных вам нужно предоставить свой класс, имеющий свойство Qty.

 private void Grid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
    {
            if(e.Column.Header.ToString().Equals("Qty"))
            { 
                 var d = ((Data)e.Row.DataContext).Qty;
            }
    }

Обновленный ответ

, чтобы получить текущийвведенные данные, в строке сетки.

private void Grid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
    {
            if(e.Column.Header.ToString().Equals("Qty"))
            { 
                 var NumericDataCtrl= GetVisualChild<NumericTextColumn>(e.EditingElement);
                    var data  = NumericDataCtrl.Text;
            }
    }

Для доступа к дочернему элементу управления внутри EditingElement я использовал следующий метод

public static T GetVisualChild<T>(Visual parent) where T : Visual

    {

        T child = default(T);

        int numVisuals = VisualTreeHelper.GetChildrenCount(parent);

        for (int i = 0; i < numVisuals; i++)

        {

            Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);

            child = v as T;

            if (child == null)

            {

                child = GetVisualChild<T>

                (v);

            }

            if (child != null)

            {

                break;

            }

        }

        return child;

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...