我有一个数据网格,它的项目源与数据库中的数据绑定在一起。它有两个数据模板,使用值转换器来限制值(我已经使用转换器将员工ID(frow1列)转换为图像路径)。现在我想显示用户双击带有图像的单元格时的雇员ID。当我成功运行了填充有雇员图像的应用程序数据网格时。
到目前为止,我已尝试使用下面的代码中所示的DataGridCellInfo进行以下操作。我在数据网格xamal中设置了CurrentCell =“ {Binding CellInfo,Mode = TwoWay}”。此处CellInfo是公共属性
<DataGrid x:Name="dtGrid" AutoGenerateColumns="False"
Margin="0,0,0,0" SelectionUnit="Cell"
HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"
SelectionMode="Single"
CurrentCell="{Binding CellInfo, Mode=OneWayToSource}"
VerticalAlignment="Top" RowHeight="50" ColumnWidth="50"
AlternatingRowBackground="{x:Null}" AlternationCount="2"
CanUserResizeRows="False" CanUserAddRows="False" CanUserDeleteRows="False"
CanUserReorderColumns="False" CanUserResizeColumns="False"
CanUserSortColumns="False" HeadersVisibility="None"
GridLinesVisibility="None" HorizontalGridLinesBrush="{x:Null}"
VerticalGridLinesBrush="{x:Null}" >
<DataGrid.Columns>
<DataGridTemplateColumn Width="SizeToCells" IsReadOnly="True" > <DataGridTemplateColumn.CellTemplate >
<DataTemplate>
<Button Background="#FF1D5BBA"
PreviewMouseDoubleClick="Button_PreviewMouseDoubleClick" >
<Image Source="{Binding Path=frow1,
Converter=StaticResource
prfileconverter},
Mode=Default}" />
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
我的代码后面:
private void Button_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
MessageBox.Show(CellInfo.ToString())
}
private DataGridCellInfo _cellInfo;
public DataGridCellInfo CellInfo
{
get {
return _cellInfo;
}
set
{
_cellInfo = value;
OnPropertyChanged("CellInfo");
//this is to refresh through INotifyPropertyChanged
}
}
在这里,我对如何在单元格上进行MouseDoubleClick时如何显示雇员ID感到困惑。当我双击该单元格时,我会收到消息框,上面写着“ System.Windows.Control.DataGridCellInfo”。项目(员工编号)
答案 0 :(得分:0)
问题是DataGridTemplateColumn
无权访问CellInfo.Item
(不存在)
最简单的方法是通过您的Button_PreviewMouseDoubleClick
事件,将Button的Tag属性绑定到您的数据,然后在事件处理程序中像这样访问它:
<Button PreviewMouseDoubleClick="Button_PreviewMouseDoubleClick" Tag="{Binding Path=frow1}">....
然后在事件处理程序中执行以下操作:
private void Button_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
var button = (Button)sender;
MessageBox.Show(button.Tag.ToString());
}