设置WPF组合框的SelectedItem

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (44)
<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)
提问于
用户回答回答于

有很多方法可以做到这一点,但对于您的示例,我会更改组合框标签,如下所示:

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

我添加了属性defing 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;

...而且你还有其他的优点。

用户回答回答于

在这种情况下,您应该可以简单地使用.Text()它来设置它:

cmbBudgetYear.Text = "2010";

然而,为了获得更改后的价值,也许是因为我没有SelectedValuePath="Content"到处设置,或者因为我没有用SelectedValue它来设置它(以及为什么我提到它),所以确定实际值,因为在添加SelectionChangedXAML中的事件处理程序之后必须执行此操作:

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

至少,这是我碰到的......我知道这个问题是关于设置盒子的,但是不能仅仅解决设置而不谈论如何得到它,以后也如此,因为如何设置它将决定如何如果它被改变,你会得到它。

扫码关注云+社区

领取腾讯云代金券