我有一个DataGrid,我已经设置了一个调用方法的双击事件。下面是我的xaml,接下来是我的代码隐藏页面。双击事件有效,但我得到的回报是“system.data.datarowview”,我不知道为什么。我正在尝试获取该行的“vehicleID”值,该行是隐藏的自己的列。
XAML:
<DataGrid Name="OpenVehicles" AutoGenerateColumns="False" IsReadOnly="False" SelectedItem="{Binding vehicleID}" SelectionUnit="FullRow">
<DataGrid.ItemContainerStyle>
<Style TargetType="DataGridRow">
<EventSetter Event="MouseDoubleClick" Handler="OpenVehicleClick" />
</Style>
</DataGrid.ItemContainerStyle>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding vehicleID}" Width="*" Header="vehicleID" Visibility="Hidden"/>
<DataGridTextColumn Binding="{Binding date, StringFormat=\{0:MMM dd yyyy \}}" Width="*" Header="Date"/>
<DataGridTextColumn Binding="{Binding companyshortname}" Width="*" Header="Customer"/>
<DataGridTextColumn Binding="{Binding subject}" Width="5*" Header="Vehicle Description"/>
<DataGridTextColumn Binding="{Binding FName}" Width="*" Header="Owner"/>
</DataGrid.Columns>
C#代码:
private void OpenVehicleClick(object sender, RoutedEventArgs e)
{
MessageBox.Show(OpenVehicles.CurrentCell.Item.ToString());
}
有关如何检索列值或任何其他建议的任何想法都非常受欢迎。我无法忍受。
答案 0 :(得分:1)
DataRowView.Row
属性将包含您想要的DataRow
。从那里,您可以使用DataRowView.Row["ColumnName"]
索引器
答案 1 :(得分:1)
XAML中的这一位:SelectedItem="{Binding vehicleID}"
表示所选数据项将绑定到网格的DataContext的属性vehicleID
中(它将从它所在的控件/页面继承)上)。
我注意到你在网格上排除了任何ItemsSource的提及 - vehicleID
属性应该与ItemSource属性在同一个类中。您需要确保vehicleID
是公共属性,而不是字段 - 您无法将数据绑定到字段。因此,根据您的设置方式,这里有几个选项:
pubic class MyPage
{
public MyPage()
{
InitializeComponent();
this.DataContext = this;
}
private void OpenVehicleClick(object sender, RoutedEventArgs e)
{
MessageBox.Show(VehicleID != null ? VehicleID.WhateverProperty : "Nothing selected");
}
public MyDataObject VehicleID { get; set; }
}
或者,如果您有一个单独的viewmodel分配给页面/控件的DataContext:
private void OpenVehicleClick(object sender, RoutedEventArgs e)
{
var selectedDataItem = ((MyViewModel) DataContext).VehicleID;
MessageBox.Show(selectedDataItem != null ? selectedDataItem.WhateverProperty : "Nothing selected");
}
答案 2 :(得分:0)
目前,您指的是网格本身。 您的事件处理一行,因此使用事件参数在所选行中查找所需内容(在调试中调查它们)。