Можете ли вы установить выбранный элемент в ComboBox из модели представления через привязку? - PullRequest
0 голосов
/ 31 января 2019

Почему мои ComboBox не обновляются из модели представления?Моей целью было использовать ComboBox в качестве триггера для запуска запроса.Пользователь выбирает запрос и экран обновляется.Между тем, ComboBox должен сбросить себя до пункта «Выбрать фильтр ...».Но после выбора он остается на элементе, выбранном пользователем.

Код модели представления

public class FilterManagerViewModel : ViewModelBase
{
  private CBFilterDefinition _noSelectionFilter = new CBFilterDefinition() { FilterName = "Select a filter...", FilterDefinitionId = -1 };

  public FilterManagerViewModel()
  {
    PopulateFilterDefinitionList();
  }

  public List<CBFilterDefinition> FilterDefinitions { get; private set; }

  private void PopulateFilterDefinitionList()
  {
    FilterDefinitions = GetFilterDefinitions(_firmId, _screenId, CBBusinessLayer.UserId).OrderBy(x => x.FilterName).ToList();
    FilterDefinitions.Insert(0, new CBFilterDefinition() { FilterName = "<Ad Hoc Filter...>", FilterDefinitionId = 0 });
    FilterDefinitions.Insert(0, _noSelectionFilter);

    OnPropertyChanged("FilterDefinitions");

    SelectedFilterDefinition = _noSelectionFilter;
  }

  public CBFilterDefinition SelectedFilterDefinition
  {
    get { return _noSelectionFilter; }
    set
    {
      if (value != null)
      {
        if (value.FilterDefinitionId == 0)
        {
          // Do some Ad Hoc filtery stuff, here.
        }
        else if (value.FilterDefinitionId > 0)
        {
          //Do some pre-defined filtery stuff, here.
        }
      }

      OnPropertyChanged("SelectedFilterDefinition");
    }
  }
}

ComboBox XAML

<ComboBox Grid.Column="1" ItemsSource="{Binding Path=FilterDefinitions}" SelectedItem="{Binding Path=SelectedFilterDefinition}"
          DisplayMemberPath="FilterName" Width="300" HorizontalAlignment="Left" AlternationCount="2" HorizontalContentAlignment="Stretch">

Мне это кажется довольно простым.Но, возможно, мое предположение, что я должен иметь возможность устанавливать выбранный элемент через привязку, неверно.(Я попытался установить режим привязки на TwoWay, но это не имело значения)

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

Получатель SelectedFilterDefinition вызывается после вызова OnPropertyChanged и возвращает единственный и единственный экземпляр _noSelectionFilter.

Чего мне не хватает?

...