Почему мои 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
.
Чего мне не хватает?