ComboBox не изменяется при изменении привязанного значения SelectedItem - PullRequest
0 голосов
/ 24 августа 2011

У меня есть ComboBox, свойства которого ItemSource и SelectedItem привязаны к модели представления. И у меня есть следующий блок кода, который является обратным вызовом для запроса данных против DomainContext:

    /// <summary>
    /// Stores (readonly) - Stores available for ship to store.
    /// </summary>
    public ObservableCollection<StoreEntity> Stores
    {
        get { return _stores; }
        private set { _stores = value; RaisePropertyChanged("Stores"); }
    }

    /// <summary>
    /// SelectedStore - Currently selected store.
    /// </summary>
    public StoreEntity SelectedStore
    {
        get { return _selectedStore; }
        set { _selectedStore = value; RaisePropertyChanged("SelectedStore"); }
    }

    /// <summary>
    /// When stores are completely loaded.
    /// </summary>
    /// <param name="a_loadOperations"></param>
    protected void OnStoresLoaded(LoadOperation<StoreEntity> a_loadOperations)
    {
        Stores.AddRange(a_loadOperations.Entities);
        SelectedStore = a_loadOperations.Entities.FirstOrDefault();
    }

В этом примере Stores является ObservableCollection<StoreEntity> (AddRange - это метод расширения) и связан с ItemSource, а SelectedStore является StoreEntity и связан с SelectedItem.

Проблема здесь в том, что ComboBox не меняет свой выбор, чтобы отразить изменение в SelectedItem.

редактирует:

Я даже попробовал следующее, хотя я думаю, что a_loadOperation.Entities уже реализованный набор:

    /// <summary>
    /// When stores are completely loaded.
    /// </summary>
    /// <param name="a_loadOperations"></param>
    protected void OnStoresLoaded(LoadOperation<StoreEntity> a_loadOperations)
    {
        var entities = a_loadOperations.Entities.ToArray();
        Stores.AddRange(entities);
        SelectedStore = entities.First();
    }

Спасибо

Ответы [ 2 ]

1 голос
/ 24 августа 2011

Если вы хотите, чтобы изменение вашей модели представления (в частности, свойства SelectedStore) было отражено в поле со списком, вы можете:

  1. Подтвердите, что привязка сработала. Убедитесь, что он был правильно настроен в XAML, и проверьте окно «Вывод», чтобы увидеть, есть ли сообщение о том, что привязка не удалась
  2. Убедитесь, что ваш DataContext установлен правильно (возможно, это так, потому что вы получаете поле со списком `ItemsSource` из` Stores`
  3. Подпишитесь на событие PropertyChanged и подтвердите, что оно возникает при изменении свойства

Если это не сработает, возможно, это ошибка в ComboBox. Я видел случаи, когда порядок указания свойств в XAML имеет значение (например: сначала вы должны установить ItemsSource, а затем SelectedItem). Я также видел сбой привязки, пока я не добавил Mode = TwoWay (хотя в вашем примере вы пытаетесь получить привязку для обновления из вашей модели представления в ваш пользовательский интерфейс). Попробуйте подтвердить, что ваш ComboBox XAML выглядит следующим образом: <ComboBox ItemsSource="{Binding Stores}" SelectedItem="{Binding SelectedStore, Mode=TwoWay}" /> Порядок не должен иметь значения, поскольку XAML декларативен, но я лично видел, что это имеет значение для ComboBox в Silverlight.

0 голосов
/ 24 августа 2011

У меня SelectedItem привязано к Stores вместо SelectedStore. По электронной почте Ой!

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