好了一直与WPF工作了一段时间,但我需要一些帮助。WPF组合框SelectedItem
我有一个ComboBox
象下面这样:
<TabControl>
<TabItem Header="1">
<ComboBox ItemsSource="{Binding MyList}" SelectedItem="{Binding MyListSelection}"/>
</TabItem>
<TabItem Header="2"/>
</TabControl>
每当我从标签1移开,然后回来给它的选择被删除。我认为这样做的原因是控件在超出范围之后会被销毁,但是在SelectedItem变为null的过程中,这实际上并不是用户想要的,这是由于UI生命周期。
所以我想知道什么是最好的路线?我正在用MVVM构建这个应用程序,所以我可以忽略ViewModel中MyListSelection属性上的set调用,但我有遍布整个地方的ComboBoxes,并且不喜欢修改我认为是WPF错误的ViewModel。
我可以继承的WPF组合框,但没有SelectedItemChanging事件时的SelectedItem改变我只能添加一个处理程序。
任何想法?
UPDATE:
好了,打我的头靠在我发现为什么我的问题没能再现的后墙上。如果由于某种原因,列表项类型是一个类,SelectedItem被WPF设置为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
当Tabitem离焦时SelectedTest设置为null。
发生了什么事?
当列表类型是引用类型它不具有相同的行为。查看我更新的帖子 – Jose 2010-01-28 21:09:54