为什么WPF的dataGrid的selectedItem在分配dataRow后仍然为null?

时间:2015-03-17 09:43:07

标签: c# wpf

我试图以编程方式选择dataGrid上新添加的行。没有花哨的东西,没有MVVM,只是简单的代码背后。

无论我做什么,SelectedItem都保持为null - 我不知道这有什么问题。

XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <DataGrid Name="dataGrid" AutoGenerateColumns="True"/>
    </Grid>
</Window>

代码:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            //source for dataGrid
            DataTable dt = new DataTable();
            dt.Columns.Add("one", typeof(string));
            dt.Columns.Add("two", typeof(string));

            //add new row
            DataRow dr = dt.NewRow();
            dr[0] = "uno";
            dr[1] = "dos";
            dt.Rows.Add(dr);

            //select new row
            dataGrid.SelectedItem = dr;
            //here dataGrid.SelectedItem is still null, no row selected

            dataGrid.ItemsSource = dt.AsDataView();
        }
    }
}

2 个答案:

答案 0 :(得分:0)

dr还没有存在于dataGrid行中,将dt添加为itemssource然后设置所选行 ..

选中的行实际上是grid.Items中的对象,如果要将其设置为选中,请确保满足引用相等性。

答案 1 :(得分:0)

一个问题是,DataView的项目属于DataRowView类型,而您尝试将SelectedItem设置为DataRow的实例。您可以设置SelectedItem,而不是设置SelectedIndex。另一件事是设置选定的属性需要在设置ItemsSource

后完成
dataGrid.ItemsSource = dt.AsDataView();
dataGrid.SelectedIndex = 0;
//at this point dataGrid.SelectedItem is an instance of DataRowView