WPF MVVM ComboBox SelectedItem или SelectedValue, не работающий

Обновление

После небольшого количества исследования. То, что, кажется, проблема, - то, что SelectedValue/SelectedItem происходит, прежде чем источник Объекта закончен, загрузившись. Если я сижу в точке останова и ожидаю несколько секунд, она работает как ожидалось. Не знайте, как я собираюсь обойти этого.

Обновление конца

У меня есть использование приложения в WPF, использующем MVVM с ComboBox. Ниже Пример ViewModel. Проблема, которую я имею, - когда мы оставляем нашу страницу и мигрируем назад, ComboBox не выбирает текущее значение, которое выбрано.

Модель представления

public class MyViewModel
{
     private MyObject _selectedObject;
     private Collection<Object2> _objects;
     private IModel _model;

     public MyViewModel(IModel model)
    {
         _model = model;
         _objects = _model.GetObjects();
    }

    public Collection<MyObject> Objects
    {
         get
         {
              return _objects;
         }
         private set
         {
              _objects = value;
         }
     }

     public MyObject SelectedObject
     {
          get
          {
              return _selectedObject;
          }
          set
          {
               _selectedObject = value;
          }
      }
 }

Ради этого примера позволяет, говорят, что MyObject имеет два свойства (текст и идентификатор). Мой XAML для ComboBox похож на это.

XAML

<ComboBox Name="MyComboBox" Height="23"  Width="auto" 
    SelectedItem="{Binding Path=SelectedObject,Mode=TwoWay}" 
    ItemsSource="{Binding Objects}"
    DisplayMemberPath="Text"
    SelectedValuePath="Id">

Неважно, который путь я настраиваю это, когда я возвращаюсь к странице, и объект повторно собран, ComboBox не выберет значение. Объект возвращает правильный объект через получение в свойстве все же.

Я не уверен, является ли это просто проблемой с путем ComboBox и работы шаблона MVVM. Привязка текстового поля мы делаем работы правильно.

40
задан Nathan 27 August 2012 в 22:36
поделиться

4 ответа

Вы попытались реализовать INotifyPropertyChanged в Вашем viewmodel и затем повышаете PropertyChanged событие, когда эти SelectedItem установлен?

, Если это сам по себе не зафиксирует его, то Вы будете в состоянии вручную повысить PropertyChanged событие сами при навигации назад к странице, и этого должно быть достаточно, чтобы заставить WPF перерисовывать себя и показывать корректный выбранный пункт.

27
ответ дан Orion Edwards 27 November 2019 в 01:10
поделиться

Я заметил это поведение прежде также. Я заметил, что свойство SelectedIndex не вызывает ту же ошибку. Если можно реструктурировать ViewModel, чтобы представить индекс выбранного пункта и связать, в который, необходимо быть хорошими для движения.

3
ответ дан Abe Heidebrecht 27 November 2019 в 01:10
поделиться

Это мог быть способ, которым Вы применяете DataContext к Странице. В WPF каждый раз Вы перешли к Странице, все повторно инициализируется, конструктор становится вызванным, загруженные методы, все. таким образом, при установке DataContext в Представлении, Вы будете несомненно сдувать тот SelectedItem, который выбрал пользователь. Чтобы избежать, чтобы использовали свойство KeepAlive Ваших страниц.

<Page KeepAlive="True" ...>
   ...
</Page>

Это приведет только к событию Loaded, запускаемому при навигации назад к странице, которую Вы уже посетили. Таким образом, необходимо будет удостовериться установку DataContext на, Инициализируют (или внешне или в конструкторе), а не Загрузка.

Однако это будет только работать на тот экземпляр Страницы. Если Вы переместитесь к новому экземпляру той страницы по нему, то конструктора вызовут снова.

0
ответ дан markti 27 November 2019 в 01:10
поделиться

У меня были подобные проблемы, и это было решено путем проверки, что я реализовывал IEquatable правильно. Когда привязка происходит, она пытается видеть если соответствие объектов, так удостоверьтесь, что Вы правильно реализуете свою проверку равенства.

11
ответ дан 27 November 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: