我已经创建了简单的数据表机制xaml看起来很简单:
<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());
}
}
但我遇到了一个问题,或两个我想得到的数据,该单元格时,我点击的细胞,如列标题,和值的细胞。我在没有MVVM的情况下做到了这一点,就像:
void EditingDataGrid_CurrentCellChanged(object sender, EventArgs e)
{
DataGridCell Cell = EditingDataGrid.GetCurrentDataGridCell();
var Position = Cell.PointToScreen(new Point(0, 0));
TextBlock text = (TextBlock)Cell.Content;
MessageBox.Show("Value=" + text.Text, "Position" );
}
public static DataGridCell GetCurrentDataGridCell(this DataGrid dataGrid)
{
DataGridCellInfo cellInfo = dataGrid.CurrentCell;
if (cellInfo.IsValid == false)
{
return null;
}
var cellContent = cellInfo.Column.GetCellContent(cellInfo.Item);
if (cellContent == null)
{
return null;
}
return cellContent.Parent as DataGridCell;
}
但现在我想把它改造成那种模式,但我不知道怎么做。有什么办法把命令绑定到上面吗?
3条答案
按热度按时间rkue9o1l1#
您可以将
DataGrid
的CurrentCell
属性绑定到DataGridCellInfo
(而不是DataGridCell
)源属性,前提是您将Binding
的Mode
设置为两个TwoWay
:然后,每当您在视图中选择一个单元格时,视图模型的source属性就会被设置,您可以简单地将当前逻辑移动到视图模型:
您也可以将此功能 Package 在将视图模型的source属性设置为actuall单元格值的行为中:
https://www.codeproject.com/Articles/28959/Introduction-to-Attached-Behaviors-in-WPFhttps://blog.magnusmontin.net/2014/01/30/wpf-using-behaviours-to-bind-to-readonly-properties-in-mvvm/
lg40wkob2#
您可以简单地在视图模型中绑定当前单元格属性,并且您将始终拥有当前单元格:
在视图模型中:
jfgube3f3#
返回网格中从0开始单击的行
获取列0的currentRowIndex值或特定单元格值