2010-12-12 3 views
1

Я столкнулся с проблемой, я был удивлен, что не мог найти обсуждения (кроме WPF MVVM ComboBox SelectedItem or SelectedValue not working).Bind SelectedItem as ItemsSource не завершено

У меня есть форма MVVM, которая имеет 2 ctors, один для «создания нового элемента», другой для «модификации элемента». У меня есть combobox, который представляет одно из свойств элемента.

В модификации ctor свойство, связанное с ItemsSource, инициализируется, а затем устанавливается свойство, связанное с SelectedItem. Но в пользовательском интерфейсе ничего не выбрано, если я не задерживаю (даже маленький) набор SelectedItem.

Как я могу это решить? Я прилично не может держать таймер с совершенно случайным интервалом, чтобы решить проблему: D

Спасибо за вашу помощь

+0

Вы можете попробовать с SelectedIndex? Это работало для меня в прошлом. – Kugel

+0

Я следил за вашим предложением и пробовал это, но проблема в том же самом: он влияет только на selectedItem в пользовательском интерфейсе, если бит задерживается. –

ответ

0

Похоже, элегантный способ обеспечения ItemsSource инициализируется перед тем, как установить SelectedItem из VM должен иметь источник привязки ItemsSource (независимо от того, что он есть), объявленный в моих ресурсах просмотра. Я уверен, что кто-то может привести меня к свету сейчас, когда я указал на это.

Я попытался с CollectionViewSource, но не нашел способ использовать его возможности фильтра, не нарушая шаблон MVVM. Плюс я не знаю, как повторно поднять фильтр, как я привык с ICollectionView.Filter (отфильтрованные элементы зависят от другого выбора combobox, ничего действительно причудливого imo).

Возможно, ресурс, объявленный в представлении и используемый как ItemSource, не обязательно должен быть CVS, я ищу предложения здесь.

--Edit-- Я выяснил, что решение IsSynchronizedWithCurrentItem = "True", распространяемое по всему Интернету, фактически работает. Я был введен в заблуждение, потому что сначала не исправил мою проблему из-за оставшейся SelectedValuePath, которая больше не использовалась для моего контроля.

0
public MyViewModel() 
{ 
    this.Items = ...; 
    //this.SelectedItem = ...; 

    // select in separate message so that the ItemsSource has definitely been set 
    this.Dispatcher.BeginInvoke(delegate 
    { 
     this.SelectedItem = ...; 
    }); 
} 
+0

Это не работает для меня. Вы когда-нибудь работали над подобным случаем? –

Смежные вопросы