[英]C# - WPF ComboBox not setting default value in Code-behind
我的WPF
應用程序的以下代碼將默認值顯示為空白,而不是CA
我已經在調試模式下測試cmbStates.SelectedValue
正顯示出NULL
后,我移動到下一行,而使用F11
在VS2017
。 我試過將代碼移到Windows加載的事件,但仍然是完全相同的行為。
注意事項 :
comboBox
值,但除非我手動為comboBox選擇一個特定的值,否則comboBox的頂部為空白。 問題 :我可能在這里缺少什么,我們如何使它工作?
XAML :
<Window x:Class="WpfTestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
....
....
>
<Grid>
....
....
<ComboBox x:Name="cmbStates" IsEditable="True" SelectedValuePath="Content" SelectionChanged="cmbStates_SelectionChanged" />
....
....
</Grid>
</Window>
MainWindow的背后代碼 :
....
public MainWindow()
{
InitializeComponent();
cmbStates.ItemsSource = new List<string>() {"OH", "VA", "CA", "TN", "CA", "DE"};
cmbStates.SelectedValue = "CA";
}
....
更新 :
請注意,該問題更特定於在Code Behind
而不是在XAML
設置默認值,因為該列表的長度比本帖子中顯示的長得多(為簡便起見),並且默認值並不總是“ CA”-它會有所不同根據業務需求。 您可以將“ CA”視為某些字符串變量值,但是想法是相同的。
為什么不顯示所選項目的問題是此xml
屬性:
SelectedValuePath="Content"
將SelectedValue
設置為“ CA”時,不會顯示它,因為您建議視圖檢查SelectedItem
的屬性Content ,但是對於您使用的string
當然不存在。
為了使其適用於上述示例,您只需在組合框中刪除該屬性。
另一方面,如果綁定項是類,則需要顯示一個字段,並需要另一個字段作為值/標識符,那么與DisplayMemberPath
屬性結合使用SelectedValuePath
就可以了。
假設您的商品看起來像這樣:
public class SomeModel
{
public string Abbreviation { get; set; }
public string Content { get; set; }
public SomeModel(string abbreviation, string content)
{
Abbreviation = abbreviation;
Content = content;
}
}
在這種情況下, ComboBox
將如下所示:
<ComboBox x:Name="cmbStates" IsEditable="True" SelectedValuePath="Abbreviation" DisplayMemberPath="Content" SelectionChanged="cmbStates_SelectionChanged" />
這樣, 縮寫屬性是ComboBoxItem
的實際值,而Content用作ComboBox
的顯示。 現在,您的MainWindow
構造函數將如下所示:
public MainWindow()
{
InitializeComponent();
cmbStates.ItemsSource = new List<SomeModel>
{
new SomeModel("OH","Ohio"), new SomeModel("VA","Virginia"), new SomeModel("CA","California "),
new SomeModel("TN","Tennessee"), new SomeModel("DE","Delaware")
};
cmbStates.SelectedValue = "CA";
}
除了這種情況,我建議您研究WPF數據綁定和WPF MVVM模式 。
由於將ComboBox
的ItemsSource
設置為List<string>
,因此應將SelectedItem
屬性設置為此列表中包括的string
,並從XAML中刪除SelectedValuePath="Content"
,因為string
沒有Content
屬性:
cmbStates.ItemsSource = new List<string>() {"OH", "VA", "CA", "TN", "CA", "DE"};
cmbStates.SelectedItem = "CA";
XAML:
<ComboBox x:Name="cmbStates" IsEditable="True" SelectionChanged="cmbStates_SelectionChanged" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.