2010-10-27 1 views
0

Пожалуйста, мне нужна помощь:Silverlight: Помощь с IEnumerable

У меня есть ListBox переплетены с IEnumerable источника

Лицо является классом, который содержит следующие свойства: Name (строка), IsChecked (BOOL)

Мне нужно изменить свойство "isChecked" для определенного лица с названием "Bob"

Я не могу изменить стоимость недвижимости!

пожалуйста, помогите

+0

Какой у вас код? – ChrisF

ответ

1

Если вы пытаетесь иметь отображаемое значение обновляется при обновлении модели, то вам, вероятно, нужно реализовать INotifyPropertyChanged на вашей модели класса, например,

public class Person : INotifyPropertyChanged 
{ 
    public string Name 
    { 
     get 
     { 
      return this.name; 
     } 
     set 
     { 
      this.name = value; 
      this.FirePropertyChanged("Name"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected void FirePropertyChanged(string propertyName) 
    { 
     if (this.PropertyChanged != null) 
     { 
      this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
0

Я предполагаю, что вам просто нужно изменить его один раз для представления?

В зависимости от того, сколько данных у вас есть, самым простым способом реализации было бы расширить ваши данные в модели до, например, a List<>, затем внесите изменения и привяжите свой контроль к этому списку.

var people = myDataSource.ToList(); // a LINQ extension - you may need a 'using' 
var bob = people.FirstOrDefault(p => p.Name == "Bob"); 
if (bob != null) 
{ 
    bob.isChecked = true; 
} 

В качестве альтернативы и, вероятно, лучше, было бы сделать изменение «на лету» с использованием, например, a Выбрать()

var peopleWithBobTicked = myDataSource.Select(
    p => { 
      if (p.Name == "BoB") p.isTicked = true; 
      return p; 
     });