Мой список не обновляется - PullRequest
       0

Мой список не обновляется

0 голосов
/ 25 октября 2011

У меня есть список, к которому я привязываю HistoryItems, где HistoryItems - это ObservableCollection из History. Вот объявление списка:

 <ListBox x:Name="RecentListBox" SelectionChanged="RecentListBox_SelectionChanged"   ItemsSource="{Binding HistoryItems,Converter={StaticResource HistoryValueConverter} }" ItemsPanel="{StaticResource ItemsPanelTemplate1_Wrap}" ItemTemplate="{StaticResource RecentViewModelTemplate}">

Вот класс History:

public class History : INotifyPropertyChanged
    {
        public History() { }

        int _id;
        string _date;
        string _url;
        string _name;

        public History(int id, string date,string url,string name)
        {
            this.id = id;
            this.date = date;
            this.url = url;
            this.name = name;
        }

        public int id
        {
            get
            {
                return _id;
            }
            set
            {
                if (value != _id)
                {
                    _id = value;
                    NotifyPropertyChanged("id");
                }
            }
        }
        public string date
        {
            get
            {
                return _date;
            }
            set
            {
                if (!value.Equals(_date))
                {
                    _date = value;
                    NotifyPropertyChanged("string");
                }
            }
        }

        public string url
        {
            get
            {
                return _url;
            }
            set
            {
                if (!value.Equals(_url))
                {
                    _url = value;
                    NotifyPropertyChanged("url");
                }
            }
        }

        public string name
        {
            get
            {
                return _name;
            }
            set
            {
                if (!value.Equals(_name))
                {
                    _name = value;
                    NotifyPropertyChanged("name");
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(String propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (null != handler)
            {
              //  App.viewModel.HistoryItems = (App.Current as App).dataHandler.retrieveHistory_DB();
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }

Когда я запускаю приложение, список заполняется, но после того, как я делаю некоторые модификации в некоторых дочерних элементах и ​​возвращаюсь к основному панорамному виду, я пытаюсь обновить HistoryItems в OnNavigatedTo:

 App.ViewModel.HistoryItems = (App.Current as App).dataHandler.retrieveHistory_DB();

но список не обновляется (и функция возвращает правильные данные). В чем может быть проблема? History - это INotifyPropertyChanged, а HistoryItems - это ObservableCollection<History>, поэтому проблем не должно быть. Что вызывает обновление списка?

Ответы [ 3 ]

4 голосов
/ 25 октября 2011

Поскольку вы заменяете HistoryItems при обновлении, не имеет значения, что это ObservableCollection.

. Вы можете очистить HistoryItems, а затем добавить новые элементы при обновлении.Или ViewModel должен реализовывать INotifyPropertyChanged, а установщик HistoryItems должен вызывать событие.

2 голосов
/ 26 октября 2011

Перепишите установщик для ViewModel.HistoryItems, чтобы вместо этого

_historyItems = value;

это делает

if (_historyItems == null) 
  _historyItems = new ObservableCollection<HistoryItem>();
_historyItems.Clear();
foreach (var hi in value) 
  _historyItems.Add(hi);
1 голос
/ 25 октября 2011

Вам нужно NotifyPropertyChanged для App.ViewModel в сеттере HistoryItems

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...