我已经一段时间在使用WPF,但是我需要帮助。
我有一个如下所示的ComboBox
:
<TabControl>
<TabItem Header="1">
<ComboBox ItemsSource="{Binding MyList}" SelectedItem="{Binding MyListSelection}"/>
</TabItem>
<TabItem Header="2"/>
</TabControl>
每当我从选项卡1移开,然后再回到它时,选择就会被取消。我认为原因是在控件超出范围并返回时被销毁。但在此过程中,SelectedItem变为null,这不是用户想要的结果,而是由于UI生命周期引起的事件。
所以我想知道最好的方法是什么?我正在使用MVVM构建此应用程序,因此我可以忽略ViewModel中MyListSelection属性的设置调用,但是我在各个地方都有ComboBox,不喜欢为我认为是WPF错误的问题修改ViewModel。
我可以子类化WPF ComboBox,但是没有SelectedItemChanging事件,我只能在SelectedItem更改时添加处理程序。
有什么想法吗?
更新:
好的,在我头痛欲裂之后,我发现了为什么无法重现我的问题。如果列表项类型是类,则由于某种原因,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会被设置为null。
发生了什么?