2010-08-02 45 views
17
<ComboBox Grid.Row="1" Grid.Column="0" Width="Auto" Name="cmbBudgetYear"> 
    <ComboBoxItem Content="2009" /> 
    <ComboBoxItem Content="2010" /> 
    <ComboBoxItem Content="2011" /> 
    <ComboBoxItem Content="2012" /> 
</ComboBox> 

如何在後面的代碼中將所選項目設置爲當前年份?設置WPF組合框的選定項目

喜歡的東西...

cmbBudgetYear.SelectedItem = cmbBudgetYear.Items(
             get the item with the Now.Year.ToString) 

回答

33

存在很多方法可以做到這一點,但對於你的榜樣,如下我會改變組合框,標籤:

<ComboBox Grid.Row="1" Grid.Column="0" 
      Name="cmbBudgetYear" SelectedValuePath="Content"> 

我增加了屬性 - 定義SelectedValuePath="Content"。之後,你可以用相應的字符串,例如:

cmbBudgetYear.SelectedValue = "2009"; 

要小心的是,值必須是一個字符串設置的值。對於你的榜樣,用

cmbBudgetYear.SelectedValue = DateTime.Now.Year.ToString(); 

另外一個想法

如果使用代碼隱藏無論如何,這將是充滿整數組合框的可能性。像成才:

for(int y=DateTime.Now.Year;y>DateTime.Now.Year-10;y--){ 
cmbBudgetYear.Items.Add(y); 
} 

..then您可以選擇的極端簡單的像

cmbBudgetYear.SelectedValue = 2009; 

值...你將不得不還有其他優點。

+4

哈哈...... SelectedValuePath =「內容」是它。謝謝! – knockando 2010-08-02 19:57:39

+0

優秀的答案,也幫助了我。 – Califf 2012-09-03 04:24:31

0

在這種情況下,你應該能夠簡單地使用.Text()進行設置:

cmbBudgetYear.Text = "2010"; 

對於獲得價值變動後,不過,也許是因爲我沒有設置SelectedValuePath="Content"無處不在,或也許是因爲我沒有使用SelectedValue來設置它(以及爲什麼我提到它),確定實際值會變得稍微複雜一些,因爲您必須在XAML中添加SelectionChanged的事件處理函數後執行此操作:

private void cmbBudgetYear_SelectionChanged(object sender, EventArgs e) 
{ 
    ComboBox cbx = (ComboBox)sender; 
    string yourValue = String.Empty; 
    if (cbx.SelectedValue == null) 
     yourValue = cbx.SelectionBoxItem.ToString(); 
    else 
     yourValue = cboParser(cbx.SelectedValue.ToString()); 
} 

凡需要一個解析器,因爲.SelectedValue.ToString()會給你像System.Windows.Controls.Control: 2010,所以你必須分析它來獲取值:

private static string cboParser(string controlString) 
{ 
    if (controlString.Contains(':')) 
    { 
     controlString = controlString.Split(':')[1].TrimStart(' '); 
    } 
    return controlString; 
} 

至少,這是我碰到了....我知道這問題是關於如何設置方框,但是後來也沒有談論如何獲取它,因此無法解決設置問題,因爲如何設置它將決定如何更改設置。

0

它適用於我。

ObservableCollection<OrganizationView> Organizations { get; set; } 

Organizations = GetOrganizations(); 

await Dispatcher.BeginInvoke((Action)(() => 
    { 
    var allOrganizationItem = new OrganizationView() { ID = 0, IsEnabled = true, Name = "(All)" }; // It is a class 
    Organizations.Add(allOrganizationItem); 
    cbOrganizations.DisplayMemberPath = "Name"; 
    cbOrganizations.SelectedValuePath = "ID"; 
    cbOrganizations.ItemsSource = null; 
    cbOrganizations.ItemsSource = Organizations; // Set data source which has all items 
    cbOrganizations.SelectedItem = allOrganizationItem; // It will make it as a selected item 
    })); 
相關問題