Silverlight4 + C #: использование INotifyPropertyChanged в UserControl для уведомления другого UserControl не уведомляет - PullRequest
2 голосов
/ 16 мая 2010

У меня есть несколько пользовательских элементов управления в проекте, и один из них извлекает элементы из XML, создает объекты типа «ClassItem» и должен уведомлять другую информацию UserControl об этих элементах.

Я создал класс для своего объекта («модель», которую будут иметь все элементы):

public class ClassItem
{
    public int Id { get; set; }
    public string Type { get; set; }
}

У меня есть другой класс, который используется для уведомления других пользовательских элементов управления при создании объекта типа "ClassItem":

public class Class2: INotifyPropertyChanged
{
    // Properties
    public ObservableCollection<ClassItem> ItemsCollection { get; internal set; }

    // Events
    public event PropertyChangedEventHandler PropertyChanged;

    // Methods
    public void ShowItems()
    {
        ItemsCollection = new ObservableCollection<ClassItem>();

        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs("ItemsCollection"));
        }
    }
}

Данные поступают из файла XML, который анализируется для создания объектов типа ClassItem:

void DisplayItems(string xmlContent)
    {
        XDocument xmlItems = XDocument.Parse(xmlContent);

        var items = from item in xmlItems.Descendants("item")
                    select new ClassItem{
                        Id = (int)item.Element("id"),
                        Type = (string)item.Element("type)                            
                    };

    }

Если я не ошибаюсь, это должно проанализировать xml и создать объект ClassItem для каждого элемента, который он находит в XML. Следовательно, каждый раз, когда создается новый объект ClassItem, он должен запускать уведомления для всех пользовательских элементов управления, которые «привязываются» к уведомлениям «ItemsCollection», определенным в Class2.

И все же код в Class2, похоже, даже не запускается :-( и уведомлений, конечно, нет ...

Я ошибаюсь в каком-либо из предположений, которые я сделал, или я что-то упускаю? Любая помощь будет оценена!

Thx!

1 Ответ

1 голос
/ 16 мая 2010

Свойство должно быть доступно для уведомления для работы. Я не вижу места в коде, где вы устанавливаете значение "ItemsCollection".

Я обычно следую этой схеме:

  public ObservableCollection<ClassItem> ItemsCollection
        {
            get
            {
                return _itemsCollection;
            }
            set
            {
                _itemsCollection= value;
                NotifyPropertyChanged("ItemsCollection");
            }
        }

Затем обновите ItemsCollection.

    //before using the ObservableCollection instantiate it.
    ItemsCollection= new ObservableCollection<ClassItem>();

    //Then build up your data however you need to.
    var resultData = GetData();

    //Update the ObservableCollection property which will send notification
    foreach (var classItem in resultData)
    {
        ItemsCollection.Add(classItem);
    }
...