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