WPF C#从自动生成的数据网格和数据表中获取单元格值

时间:2018-03-05 08:09:36

标签: c# wpf

我为数据表创建了简单的机制xaml看起来很简单:

entity.allLocList

后面的MVVM代码基于数据表,而且相当简单:

<DataGrid ItemsSource="{Binding CurrentsFlagValuesView}" AutoGenerateColumns="True" />

但是当我点击单元格(如列标题)和单元格值时,我遇到了一个问题,或者我想要获取单元格的数据。我设法在没有MVVM的情况下这样做:

private void GenerateDataView()
{
    CurrentsFlagValuesView = new DataTable();
    CurrentsFlagValuesView.Columns.Add("Bits");

    var bitLength = 0;

    foreach (CurrentsFlagAnalysis flag in CurrentsFlagValues)
    {
        CurrentsFlagValuesView.Columns.Add(flag.DailyCurrentsTimestampInterval.ToString("yyyy-MM-dd"));
        bitLength = flag.CurrentFlagsLength;
    }

    for (var bit = 0; bit < bitLength; bit++)
    {
        List<CurrentFlagEventEnum> flags = CurrentsFlagValues
            .Select(value => value.CurrentFlags.ElementAt(bit))
            .Select(value => value ? (CurrentFlagEventEnum)bit + 1 : CurrentFlagEventEnum.None)
            .ToList();

        var dataRowValues = new List<object> { bit };
        dataRowValues.AddRange(flags.Cast<object>());

        CurrentsFlagValuesView.Rows.Add(dataRowValues.ToArray());
    }
}

但现在我想改造那种模式,但我不知道如何。任何想法如何绑定命令?

2 个答案:

答案 0 :(得分:1)

您可以将CurrentCell的{​​{1}}属性绑定到DataGrid(非DataGridCellInfo)源属性,前提是您设置了DataGridCell { {1}}两个Mode

Binding

然后,只要在视图中选择单元格,就可以设置视图模型的source属性,只需将当前逻辑移动到视图模型即可:

TwoWay

您还可以将此功能包装在将视图模型的source属性设置为actuall单元格值的行为中:

https://www.codeproject.com/Articles/28959/Introduction-to-Attached-Behaviors-in-WPF https://blog.magnusmontin.net/2014/01/30/wpf-using-behaviours-to-bind-to-readonly-properties-in-mvvm/

答案 1 :(得分:0)

您可以简单地在视图模型中绑定当前单元格属性,并且您将始终拥有当前单元格:

private DataGridCell cellInfo;
public DataGridCell CellInfo
{
    get { return cellInfo; }
}

在视图模型中:

<template>
<div class="fileUpload">
    <b-container fluid>

        <h4>Image Overview</h4>
        <b-button @click="$refs.fileInput.click()" class="btn-right">Select an image</b-button>

        <b-table @row-clicked="viewImage" striped hover :items="images" :fields="image_fields"></b-table>

        <input style="display: none" ref="fileInput" type="file" @change="fileSelected" enctype="multipart/form-data">
        <b-button variant="success" class="btn-right" @click="uploadImage" method="post">Upload image</b-button>


    </b-container>
</div>