Всплывающее окно для редактирования сложного свойства сетки данных - PullRequest
0 голосов
/ 15 апреля 2019

Я разрабатываю приложение WPF, которое использует сетку данных для отображения списка объектов. В некоторых столбцах отображаются свойства с более подробной информацией, я хотел бы отобразить итоговое значение в сетке данных, а затем при щелчке отобразить более глубокое окно, чтобы разрешить редактирование свойств.

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

<DataGrid ItemsSource="{Binding Sequence.Steps}" AutoGenerateColumns="False" IsReadOnly="True" SelectionUnit="Cell">
    <DataGrid.Resources>
        <Style TargetType="DataGridCell">
            <EventSetter Event="PreviewMouseDown" Handler="DataGrid_PreviewMouseDown" />
            <Setter Property="Focusable" Value="False" />
        </Style>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Header="Axis 1" Binding="{Binding Axes[0]}" ClipboardContentBinding="{Binding Axes[0].DestinationSP}" Width="*" />
        <DataGridTextColumn Header="Axis 2" Binding="{Binding Axes[1]}" ClipboardContentBinding="{Binding Axes[1].DestinationSP}" Width="*"/>
        <DataGridTextColumn Header="Axis 3" Binding="{Binding Axes[2]}" ClipboardContentBinding="{Binding Axes[2].DestinationSP}" Width="*"/>
    </DataGrid.Columns>
</DataGrid>

Затем я определил обработчик

private void DataGrid_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    var dlg = new Views.EditAxisMovement(CellValue); // Need to find a way to get Cell value so I can pass it
    dlg.Owner = this;
    dlg.ShowDialog();
}

Однако я не могу найти правильный способ найти CellValue для перехода в диалоговое окно. Есть ли хороший и / или лучший способ справиться с этим.

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Вы можете создать DataGridCellInfo и проверить заголовок столбца, чтобы сопоставить ячейку со свойством элемента данных, например:

private void DataGrid_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    DataGridCell cell = (DataGridCell)sender;
    DataGridCellInfo cellInfo = new DataGridCellInfo(cell);
    string header = cellInfo.Column.Header?.ToString();
    int index = -1;
    switch (header)
    {
        case "Axis 1":
            index = 0;
            break;
        case "Axis 2":
            index = 1;
            break;
        case "Axis 3":
            index = 2;
            break;
    }
    if (index != -1)
    {

    }

    var dataItem = cellInfo.Item as YourClass;
    object value = dataItem.Axes[index];
    //...
}
0 голосов
/ 15 апреля 2019

DataGridCellInfo как раз тот, который вам подходит.

var dlg = new Views.EditAxisMovement(new DataGridCellInfo((DataGridCell)sender).Item); // Need to find a way to get Cell value so I can pass it
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...