2009-11-24 107 views
2

我正在使用組合框控件的WPP應用程序,我正在分配ItemsSource它。因此,它顯示了沒有選擇項目的項目列表,現在用戶可以選擇他選擇的項目。當用戶做出選擇時,他沒有選擇撤銷該選項。我希望他能夠獲得沒有選擇項目的初始狀態。我怎樣才能做到這一點?在下拉菜單中的默認文本

回答

1

在windows窗體編程中也有類似的多種方式。您可以執行以下任一操作:

1)將空白或--None--記錄添加到作爲默認記錄的ComboBox數據源中。 2)您可以監控按鍵事件,並說使用ESC鍵將選定的索引重置爲-1。
3)如果你的組合框允許輸入,你也可以允許它們清除文本,並且如果文本框爲空,則將onleave設置爲-1,這樣它就不會重置爲選定的值。

我的用戶更喜歡選項1,但這是我的用戶。

這應該給你一些選擇。

+0

我用第一種方式,但早在這種情況下,假設我的組合框具有人的列表類型分配給其ItemsSource,並將DisplayMemberPath設置爲People類型的Name屬性。那麼我需要添加名稱爲「沒有選擇」的列表中的人員對象。是不是有一種方法,我可以直接在組合框以及我的其他People對象中命名爲「No Select」。 – viky 2009-11-24 15:06:44

+0

我沒有找到這個鏈接http://www.blueedge.nl/weblog/post/Nullable-ComboBox-in-Silverlight.aspx這就是你所要求的。可能會有點小,但它可以做與1號相同的事情,而無需手動添加空白記錄。該解決方案看起來應該運行良好。大聲笑,我甚至可以適應自己的需要。除此之外,我必須同意網絡上的很多人,除了添加虛擬記錄來實現您所尋找的內容之外,沒有太多內容。所以除此之外,我會推薦其中一種按鍵/文本監視解決方案。 – 2009-11-27 15:30:51

1

我會去重置回默認空白記錄(索引爲-1) - 無記錄每次。如果您正在處理「選擇已更改」的事件或ComboBox上的某些事件,那麼如果將對話框指向-1,則可能會出現空引用錯誤,並且這很容易,因爲您必須設置的唯一更改已設置選擇的索引爲(比如說)0而不是-1。

myComboBox.SelectedIndex = 0; //where 0 is a given default content entry. 
1

一般來說,我發現,如果我需要的複雜性添加到一個WPF應用程序,將其添加到數據源是不是將它添加到XAML更穩健。

在你的例子中,我會在我的數據源中解決這個問題。如果我有:

public IEnumerable<Person> People { get {...} } 
在我的數據源

,我想補充一點:

public IEnumerable<Person> PeopleWithNull 
{ 
    get 
    { 
     return (new List<Person> { null }).Concat(People); 
    } 
}