Привязка комбинированного списка к списку в модели представления - PullRequest
0 голосов
/ 17 августа 2010

У меня есть viewmodel со свойством Animals типа list. Я пытаюсь связать этот список со списком на моей странице xaml. Я не могу заставить этот комбобокс связываться. Что я делаю неправильно?

<ComboBox x:Name="uxAnimal" Grid.Row="0" Grid.Column="1" Width="130" HorizontalAlignment="Left"  ItemsSource="{Binding Path=Animals}"  >

Спасибо

Ответы [ 3 ]

0 голосов
/ 17 августа 2010

Предположительно, ваше поле со списком связывается до того, как заполняются Животные, и, поскольку Животные не являются ObservableCollection, у них нет возможности сообщить списку, что его содержимое изменилось ...

Два простых варианта:

  1. Предполагая, что класс, содержащий Animals, реализует INotifyPropertyChanged, вам просто нужно вызвать событие PropertyChanged ПОСЛЕ того, как вы заполните Animals значениями.

  2. Делайте привязку из кода, а не из xaml. После того, как животные заполнены данными, вы можете:

    uxAnimal.ItemsSource = Животные;

0 голосов
/ 20 августа 2010

На самом деле вам не нужно помещать элементы списка в ObservableCollection, но в модели вы должны реализовать INotifyPropertyChanged и запускать свойство при настройке списка.

private IList _myList;
public IList Animals 
{
    get { return _myList; }
    set { 
         _myList = value; 
          if (PropertyChanged != null) { 
                PropertyChanged(this, new PropertyChangedEventArgs("Animals"); 
            } 
        }
}

Кстати, вы можете использовать хороший System.Windows.Data.CollectionViewSource, чтобы получить ICollectionView для получения уведомлений, отслеживания текущего элемента и т. Д. Бесплатно из вашего списка.

0 голосов
/ 17 августа 2010

Возможно, вам нужно преобразовать ваш Список (если это тип данных, который вы используете) в ObservableCollection. Как это:

ObservableCollection<Animal> newList = new ObservableCollection<Animal>(oldList);

Где "oldList" - ваш оригинальный список типа List.

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