WPF Combobox - Предварительный выбор элемента - PullRequest
1 голос
/ 26 февраля 2011

Я хочу предварительно выбрать комбинированный список (выбрать существующий элемент) из источника элементов. Вот моя модель класса и синтаксис xaml.

Class ViewModelSample
{
 Public List<Animal> Animals;
 Public LivingBeing  LivingBeingInst {get; set;}
}

Class LivingBeing
{
  Public Animal AnimalInst {get; set;} 
}

--------------------------------------------------------------------
<Combobox ItemsSource={Binding Animals} SelectedItem={Binding LivingBeingInst.AnimalInst}
 DisplayMemeber = SomePropertyInAnimal>
--------------------------------------------------------------------------

Но это не работает. Все, что я хочу, - когда появляется xaml, мне нужно предварительно выбрать комбинированный список с помощью элемента, указанного в SelectedItem.

Любая помощь очень ценится. Спасибо, Мани

Ответы [ 4 ]

3 голосов
/ 27 февраля 2011

Спасибо за ввод, и я решил это.Я реализовал INotifyPropertyChanged, но это не проблема.

SelectedItem поля со списком должен быть одним из значений из Collection, заданной в ItemsSource.Хотя AnimalInst относится к типу Animal, он не является одним из объектов в ItemsSource.Поэтому я объявил свойство SelectedAnimal и связал его с SelectedItem.SelectedAnimal возвращает тот же экземпляр из коллекции Animals, сравнивая AnimalInst.Name.Пример как ниже.(Графики это коллекция).

 private ISchedule _selectedSchedule;
       public ISchedule SelectedSchedule
        {
            get
            {
                if(_selectedSchedule != null)
                {
                    var schedule = this.Schedules.Where(item => item.GlobalCodesId == _selectedSchedule.GlobalCodesId).FirstOrDefault();
                    return schedule;
                }
                return _selectedSchedule;
            }
           set 
           { 
               _selectedSchedule = value;
               base.NotifyPropertyChanged("SelectedSchedule");
           }
        }
2 голосов
/ 26 февраля 2011

Обычно у вас есть List (в вашем случае Animals) вне вашей ViewModel и свойство SelectedAnimal, в вашем случае оказывается, что свойство LivingBeingInst должно быть выбранным животным из списка.

Чтобы заставить что-то подобное работать, вам, вероятно, придется написать некоторый код для преобразования LivingBeing в животное и обратно через ValueConverter.

Однако я считаю, что лучше всего было бы создать свойство SelectedAnimal для хранения выбранного животного.

В вашем конструкторе или там, где вы изначально заполняете список животных, вы можете установить SelectedAnimal для первого элемента в списке.

1 голос
/ 22 апреля 2015

Начальное значение SelectedItem должно быть экземпляром объекта, который является членом ComboBox ItemsSource. В этом примере LivingBeingInst.AnimalInst должно быть в коллекции Animals.

У вас также может быть свойство, которое находит соответствующий элемент для LivingBeingInst.AnimalInst в коллекции Animals, как, например, ответ на все вопросы.

0 голосов
/ 26 февраля 2011

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

По крайней мере, это мое предположение из нерабочего, не компилируемого, не реально написанного вами кода. Вообще говоря, вы получите более полезные ответы, если разместите реальный код, особенно если вы потратите время на реализацию наименьшего минимального подмножества существующего кода, в котором все еще присутствует проблема, которую вы пытаетесь решить. (Среди прочего, вы можете найти ответ сами, когда сделаете это.)

...