我想获取特定DataGrid项目的行索引或项目索引。我已经通过itemsource从循环中获取所有项目,
foreach (Item item in Datagrid.ItemsSource)
{
if (item.Code != null)
{
if (code == item.Code)
{
MessageBox.Show("equal");
}
}
}
在上面的代码中,如果code==item.code
出现了消息,我已经应用了一些条件。在这种情况下,我也想获取该项目索引或行索引。如何获得。
注意:我有一个想法在Datagrid itemsource加载时执行此操作,还将Datagrid的索引与Item对象绑定并在需要时获取。但是逻辑似乎很复杂。有没有最简单的解决方案?
Datagrid:
<DataGridTextColumn Header="Code" Width="1*" Binding="{Binding Code, Mode=TwoWay}"/>
以此加载Datagrid项目,
void AddValues()
{
Datagrid.ItemsSource = null;
List<Item> list = new List<Item>();
list.Clear();
for(int i = 0; i<30; i++)
{
string number = i.ToString();
Item item = new Item()
{
Code = "1",
};
list.Add(item);
}
Datagrid.ItemsSource = list;
}
答案 0 :(得分:1)
要求LINQ对不匹配的行进行计数,这等于第一个匹配项的从零开始的索引。
var index = Datagrid.ItemsSource.Cast<Item>()
.TakeWhile
(
item => item.Code != code
)
.Count();
为使代码清晰起见,您可能希望将其放在扩展方法中:
public static class ExtensionMethods
{
static public int IndexOf<T>(this IEnumerable<T> source, Func<T,bool> func)
{
return source.TakeWhile( item => !func(item) ).Count();
}
{
var index = DataGrid.ItemsSource.Cast<Item>().IndexOf( i => i.Code == code );