如何在DataGrid中确定所选单元格的值? (WPF)

时间:2010-10-01 09:20:17

标签: wpf

如何在SelectedCell中确定Value的{​​{1}}? (WPF)

我的DataGrid有9个coloums和5行,我想知道点击的行[0]的DataGrid的{​​{1}}。

我在Windows窗体中使用了这段代码:

Value

但我不知道wpf中的等效代码。

5 个答案:

答案 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;

}