我有多个DataGrids
存储一个唯一ID,然后是关于该人,公司等的多列信息。DataGrid
与TabControl
一起存储,并带有单独的{{ 1}}用于填写有关此人/公司的详细信息。当用户点击添加时,我想将它们带回第一个TabItem
,并自动选择用户添加的新项目(个人或公司)。 TabItem
绑定到DataGrids
我已经可以使用;
重新设置TabItemObservableCollections
有没有办法在点击添加后设置tabItem.IsSelected = true
,循环浏览TabItem
中的项目,找到新项目的ID并设置DataGrid
对吗?当我将其分配给个人/公司时,我会知道该项目的ID。
SelectedItem
CompanyView是CompanyView.MoveCurrentTo(companyDetails);
和CollectionView
用户添加的公司详细信息,但这不起作用。
答案 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}"
>