我正在开发使用数据网格显示对象列表的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
并传递到对话框的正确方法。有没有更好和/或更好的方法来处理此问题。
答案 0 :(得分:0)
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
答案 1 :(得分:0)
您可以创建一个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];
//...
}