Хорошо, некоторое время работал с WPF, но мне нужна помощь.
У меня есть ComboBox
, как показано ниже:
<TabControl>
<TabItem Header="1">
<ComboBox ItemsSource="{Binding MyList}" SelectedItem="{Binding MyListSelection}"/>
</TabItem>
<TabItem Header="2"/>
</TabControl>
Всякий раз, когда я отхожу от вкладки 1, а затем возвращаюсь к ней, выбор удаляется. Я думаю, что причина в том, что элементы управления разрушаются, когда они выходят из области видимости, а затем возвращаются обратно. Но в процессе этого SelectedItem становится нулевым, что на самом деле не то, что хотел пользователь, это событие из-за пользовательского интерфейса Жизненный цикл.
Так что мне интересно, какой маршрут лучше выбрать? Я создаю это приложение с MVVM, чтобы я мог игнорировать вызов set для свойства MyListSelection в моей ViewModel, но у меня есть ComboBox повсюду, и мне не нравится изменять мою ViewModel для того, что я считаю ошибкой WPF.
Я мог бы создать подкласс WPF ComboBox, но события SelectedItemChanging не существует, я могу добавить обработчик только при изменении SelectedItem.
Есть идеи?
UPDATE:
Хорошо, после того, как я ударился головой о стену, я понял, почему моя проблема не может быть воспроизведена. Если по какой-либо причине тип элемента списка является классом, то в WPF для SelectedItem устанавливается значение null, но если это тип значения, это не так.
вот мой тестовый класс (VMBase - это просто абстрактный класс, который реализует INotifyPropertyChanged):
public class TestListViewModel : VMBase
{
public TestListViewModel()
{
TestList = new List<TestViewModel>();
for (int i = 0; i < 10; i++)
{
TestList.Add(new TestViewModel(i.ToString()));
}
}
public List<TestViewModel> TestList { get; set; }
TestViewModel _SelectedTest;
public TestViewModel SelectedTest
{
get { return _SelectedTest; }
set
{
_SelectedTest = value;
OnPropertyChanged("SelectedTest");
}
}
}
public class TestViewModel : VMBase
{
public string Name {get;set;}
}
Поэтому, когда я изменяю TestList на тип int и перехожу между вкладками, SelectedItem остается неизменным. Но когда он имеет тип TestViewModel
SelectedTest устанавливается в ноль, когда табайт выходит из фокуса.
Что происходит?