设置WPF ComboBox的SelectedItem

时间:2010-08-02 19:44:19

标签: wpf combobox

<ComboBox Grid.Row="1" Grid.Column="0" Width="Auto" Name="cmbBudgetYear">
   <ComboBoxItem Content="2009" />
   <ComboBoxItem Content="2010" />
   <ComboBoxItem Content="2011" />
   <ComboBoxItem Content="2012" />
</ComboBox>

如何在后面的代码中将所选项目设置为当前年份?

像...一样的东西。

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

4 个答案:

答案 0 :(得分:42)

有很多方法可以做到这一点但是对于你的例子,我会改变ComboBox-Tag,如下所示:

<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);
}

..然后你可以选择极其简单的值,如

cmbBudgetYear.SelectedValue = 2009;

......你还有其他优势。

答案 1 :(得分:4)

对于我来说,我是通过以下方式手动添加值的:

myComboBox.Items.Add("MyItem");

然后我用以下方法选择想要的人:

myComboBox.SelectedItem = "WantedItem";

而不是:

myComboBox.SelectedValue = "WantedItem";

答案 2 :(得分:1)

在这种情况下,您应该只需使用.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;
}

至少,这是我遇到的......我知道这个问题是关于设置框,但不能解决只设置而不讨论如何获取它,以后,也就是如何设置它如果它被改变,将决定你如何得到它。

答案 3 :(得分: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
    }));