У меня есть TreeView, который позволяет пользователю выбирать различные элементы.Отображение для каждого элемента определяется с помощью шаблонов данных с DataType, установленным на соответствующий тип ViewModel.DataContext автоматически устанавливается на основе выбранного элемента в древовидном представлении для соответствующего ViewModel.
Вот проблема:
Один из шаблонов данных имеет ComboBox, связанный сObservableCollection для получения списка элементов и свойство для получения / установки SelectedValue в ViewModel.
Когда я выбираю один элемент этого типа, а затем выбираю другой элемент того же типа, ComboBox отображает пустойвместо правильно выбранного элемента.Похоже, что поле со списком устанавливает свойство SelectedValue равным NULL сразу после перехода к новому элементу, а затем никогда не обновляется.
<ComboBox Margin="1,0"
ItemsSource="{Binding ItemsToSelect}"
SelectedValue="{Binding SelectedValue}"
SelectedValuePath="ValuePath" DisplayMemberPath="DisplayPath"
IsEnabled="{Binding CanSelectItem}">
</ComboBox>
Действительно странная часть, если я выбираюэлемент другого типа при выборе элементов одного типа, он всегда отображается правильно.
Я пытался игнорировать значение NULL в установщике SelectedValue, но это не сработалонезависимо от того, вызывал ли я также событие PropertyChanged или нет.
private MyObject selectedValue;
public MyObject SelectedValue
{
get
{
return selectedValue;
}
set
{
if (value != null)
{
this.selectedValue = value;
}
this.OnPropertyChanged("SelectedValue");
}
}
Глядя на подобные вопросы во время написания этого, я получаю интересный атрибут, который я еще не нашел - IsSynchronizedWithCurrentItem
из этого вопрос .Сначала я подумал, что это решило проблему, но, увы, он просто несколько меняет поведение.
Если для этого атрибута установлено значение True
, комбо не полностью отменяет свой выбор,но вместо этого просто помечает первый элемент как выбранный.Таким образом, вместо того, чтобы быть установленным в NULL , теперь свойство SelectedValue устанавливается для первого элемента в списке.
У кого-нибудь есть идеи для решения?