以编程方式设置DataGrid.SelectedItem

时间:2015-12-01 16:02:55

标签: c# wpf datagrid

我有多个DataGrids存储一个唯一ID,然后是关于该人,公司等的多列信息。DataGridTabControl一起存储,并带有单独的{{ 1}}用于填写有关此人/公司的详细信息。当用户点击添加时,我想将它们带回第一个TabItem,并自动选择用户添加的新项目(个人或公司)。 TabItem绑定到DataGrids

我已经可以使用;

重新设置TabItem
ObservableCollections

有没有办法在点击添加后设置tabItem.IsSelected = true ,循环浏览TabItem中的项目,找到新项目的ID并设置DataGrid对吗?当我将其分配给个人/公司时,我会知道该项目的ID。

编辑:我尝试过使用;

SelectedItem

CompanyView是CompanyView.MoveCurrentTo(companyDetails); CollectionView用户添加的公司详细信息,但这不起作用。

2 个答案:

答案 0 :(得分:0)

你已经说过你可以设置TabItem,所以让我们走得更远。

循环浏览DataGrid

的项目
int ID=5; //you said you know the ID field

var items = yourDataGrid.Items as ObservableCollection<CompanyModel>;
foreach (CompanyModel m in items)
{
     if (m.Id == ID)
     { 
        yourDataGrid.SelectedItem = item;                                   
        yourDataGrid.ScrollIntoView(yourDataGrid.SelectedItem);
        break;
     }
 }

答案 1 :(得分:0)

MVVM模型非常适合这种情况。

如果你绑定到一个集合,你可以在使用List.Except()

将它推送到你的setter中的集合之前捕获它。

因为您正在将DataGrid绑定到ObservableCollection,所以您可以为SelectedItem添加一个额外的绑定,并在找到更改后以及将更改推送到Collection之后手动设置SelectedItem。

选择何时回到想要的TabItem取决于你。

由于您绑定了SelectedItem,因此需要添加

SelectionMode="Single"

NotifyPropertyChanged();由于MVVM模型而被使用

属性:

private Item _selectedItem;

public Item SelectedItem
{
    get { return _selectedItem; }
    set
    {
        _selectedItem= value;
        NotifyPropertyChanged();
    }
}

private ObservableCollection<Item> _items;

public ObservableCollection<Item> Items
{
    get { return _items; }
    set
    {
        var tempList = value.Except(_items).ToList();

        _addresses = value;

        //if you are 100% sure only one item will be added at a time, you can add .First()
        //edit: please also keep in mind you need to check if there is actually an item that was added. when items are removed, this would also try to change the SelectedItem
        SelectedItem = tempList.First();

        NotifyPropertyChanged();
    }
}

示例wpf绑定:

<DataGrid
    ItemsSource="{Binding Items}"
    SelectionMode="Single"
    SelectedItem="{Binding SelectedItem}"
>