好了一直與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