2012-02-17 82 views
1

基本上,我将人员列表绑定到silverlight数据网格,第一行是id 1的主要人员,每列都有一个复选框,默认情况下它们都会被检查为主要人员。第二行等等都没有被检查,情况是,如果用户不需要默认值,那么他们可以检查来自其他人的其他列,但是一旦他们检查到来自主人的应该是自动取消选中反之亦然,这只是针对同一列。示例列1是年龄,列2是名称,然后默认是检查他们的主要人,如果我不喜欢那些数据我可以检查年龄从任何其他人将从主要人不选中年龄。并且我将该复选框绑定到布尔值上。所以,我需要一个方法来获取被捕获的行ID和被检查的属性的名称。更新使用LINQ的对象列表

List<Person> l = new List<Person>(); 
     l.Add(new Person() { Id = 1, Age = 20, IsFirstNameSelected = false, IsLastNameSelected = false }); 
     l.Add(new Person() { Id = 2, Age = 28, IsFirstNameSelected = true, IsLastNameSelected = true }); 
     l.Add(new Person() { Id = 3, Age = 22, IsFirstNameSelected = true, IsLastNameSelected = true }); 
+0

你的问题是什么?你的解释让我感到困惑;-) – BrokenGlass 2012-02-17 19:56:57

+0

@BrokenGlass我编辑我的问题更多的解释。 – user282807 2012-02-18 02:54:55

回答

0

我不确定我是否正确理解问题,但是如果您的意思是对于指定的人员ID,您希望更新IsLastNameSelectedIsFirstNameSelected的属性以获得指定人员ID的相应属性的否定,那么这将做到这一点:

int id = 1; 

IEnumerable<Person> updatedList = 
    l.Select(person => new Person() 
    { 
     Id = person.Id, 
     Age = person.Age, 
     IsFirstNameSelected = person.Id == id ? person.IsFirstNameSelected : !(l.Single(p => p.Id == id).IsFirstNameSelected), 
     IsLastNameSelected = person.Id == id ? person.IsLastNameSelected : !(l.Single(p => p.Id == id).IsLastNameSelected),    
    }); 
+0

感谢您的回复。我解释了我的问题。你的回复只需要在ID中,我需要一个方法,需要在ID和布尔属性的名称。我的例子只显示2,但我实际上有20多这些。 – user282807 2012-02-18 02:57:30

0
l.ForEach(p=> {if (p!= l.First() 
        {p.IsFirstNameSelected = !l.First().IsFirstNameSelected } 
       }); 

类似的东西?

我刚刚检查过,如果对象是第一个或不是,但您也可以应用其他条件。