如何在SelectedCell
中确定Value
的{{1}}? (WPF)
我的DataGrid
有9个coloums和5行,我想知道点击的行[0]的DataGrid
的{{1}}。
我在Windows窗体中使用了这段代码:
Value
但我不知道wpf中的等效代码。
答案 0 :(得分:3)
确定所选单元格的值更多的是WinForms。 WPF旨在以不同的方式工作;您的UI旨在与逻辑分离。因此,DataGrid成为一种演示工具,而不是为了价值而被戳戳和刺激的东西。
相反,使用WPF,您希望处理绑定到网格本身的对象,而不管它们的显示方式。忘记网格 - 只需在绑定对象列表中找到用户当前“选中”的对象。
SelectedItem是网格本身的属性,由于WPF的高级绑定机制,您可以通过XAML将此值绑定到ViewModel上的属性:
ItemsSource="{Binding Orders, Mode=OneWay}"
SelectedItem="{Binding SelectedOrder, Mode=TwoWay}"
当用户选择网格中的项目时,双向绑定将使用该行中该对象的值更新ViewModel上的SelectedItem属性。
通过这种方式,您甚至不必处理网格或UI的知识。
我希望这是有道理的。我知道这是一种不同的方法和来自WinForms的不同思维方式。
答案 1 :(得分:3)
您应该使用DataGrid_SelectedCellsChanged事件。
private void dataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
foreach (var item in e.AddedCells)
{
var col = item.Column as DataGridColumn;
var fc = col.GetCellContent(item.Item);
if (fc is CheckBox)
{
Debug.WriteLine("Values" + (fc as CheckBox).IsChecked);
}
else if(fc is TextBlock)
{
Debug.WriteLine("Values" + (fc as TextBlock).Text);
}
//// Like this for all available types of cells
}
}
HTH
答案 2 :(得分:1)
我在stackoverflow中找到了其他人发布的解决方案:WPF Toolkit DataGrid SelectionChanged Getting Cell Value
试试吧。
答案 3 :(得分:0)
private void dataGrid1_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
var item = e.AddedCells[0];
{
var col = item.Column as DataGridColumn;
var fc = col.GetCellContent(item.Item);
if (fc is CheckBox)
{
}
else if (fc is TextBlock && col.DisplayIndex == 0)
{
textBlock1.Text = (fc as TextBlock).Text;
}
}
}
答案 4 :(得分:0)
有时绑定到SelectedItem不起作用(取决于你的模型有多疯狂。我必须转换模型,所以一切都是颠倒的,正常的默认值不会一直有效。
鉴于此,
在dataGrid selectedCellChanged中,您可以通过以下方式访问绑定对象:
从前面的Orders []示例中假设每个Order都有一个SubOrders数组
foreach (var selectedCell in e.AddedCells)
{
var order = (Order)selectedCell.Item;
var subOrder = order.SubOrders[selectedCell.Column.DisplayIndex-1];
var someValue = subOrder.Value;
}