wpf MVVM ObservableCollection <string>не обновляет представление - PullRequest
4 голосов
/ 14 мая 2011

У меня проблема с тем, что моя ObservableCollection не обновляет представление. Я могу поместить точку останова до OnPropertyChange и убедиться, что в моей коллекции есть имена.

В моей модели есть событие, которое запускает список со случайными именами в нем.

в моей модели просмотра я подписываюсь на это событие, и мой обработчик событий делает это

void _manager_ProcessesChanged(List<string> n)
    {
        //create a new collection to hold current Ids
        ObservableCollection<string> names = new ObservableCollection<string>();

        //copy ids into our collection
        foreach (string name in n)
        {
            names.Add(name);
        }

        Names = names;
    }

свойство my Names выглядит так

ObservableCollection<string> _names = new ObservableCollection<string>();
public ObservableCollection<string> Names
    {
        get { return _names; }
        set
        {
            _names = value;
           OnPropertyChanged("Names");
        }
    }

и мой вид привязки выглядит следующим образом

<Window.DataContext>
    <vm:MainWindowViewModel/>
</Window.DataContext>
<Grid>
    <ListBox ItemsSource="{Binding Path=Names}"/>
</Grid>

Если я изменю коллекцию для <string> на <int>, она, кажется, будет работать нормально ... что мне не хватает?

Ответы [ 2 ]

5 голосов
/ 14 мая 2011

Если вы повторно создадите экземпляр ObservableCollection, вы потеряете привязку к коллекции.

Вы должны .Clear (...) и .Add (...) элементы, а также вы должны просто изменить ObservableCollection Names на авто-свойство. Нет необходимости вызывать OnPropertyChanged здесь, так как он обрабатывается типом для вас.

2 голосов
/ 14 мая 2011

Я тоже столкнулся с этим.Не уверен, что это идеальное решение (конечно, не похоже), но это сработало для меня

void _manager_ProcessesChanged(List<string> n)
{
    Names.Clear();

    //copy ids into our collection
    foreach (string name in n)
    {
        Names.Add(name);
    }
}
...