设置WPF组合框的SelectedItem

设置WPF组合框的SelectedItem,wpf,combobox,Wpf,Combobox,有很多方法可以做到这一点,但对于您的示例,我将更改ComboBox标记,如下所示: cmbBudgetYear.SelectedItem = cmbBudgetYear.Items( get the item with the Now.Year.ToString) 请注意,值必须是字符串。例如,使用 cmbBudgetYear.SelectedValue = "2009"; 另一个想法 如果您使用代码隐藏,是否

有很多方法可以做到这一点,但对于您的示例,我将更改ComboBox标记,如下所示:

cmbBudgetYear.SelectedItem = cmbBudgetYear.Items(
                                         get the item with the Now.Year.ToString)
请注意,值必须是字符串。例如,使用

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

。。。此外,您还有其他优势。

在这种情况下,您应该能够简单地使用
.Text()
进行设置:

cmbBudgetYear.SelectedValue = 2009;
但是,为了在更改后获取值,可能是因为我没有到处设置
SelectedValuePath=“Content”
,也可能是因为我没有使用
SelectedValue
来设置它(以及我为什么要提到它),所以确定实际值变得稍微复杂一些,由于在XAML中添加
SelectionChanged
的事件处理程序后必须执行此操作:

cmbBudgetYear.Text = "2010";
因为
.SelectedValue.ToString()
将提供类似于
System.Windows.Controls.Control:2010
的内容,所以需要使用解析器,因此必须对其进行解析才能获得值:

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());
}
至少,这是我遇到的。。。。我知道这个问题是关于设置框的,但不能只讨论设置而不讨论如何获取它,因为您如何设置它将决定您如何获取它(如果它被更改)。

这对我来说很好

private static string cboParser(string controlString)
{
   if (controlString.Contains(':'))
   {
       controlString = controlString.Split(':')[1].TrimStart(' ');
   }
   return controlString;
}
observedcollection组织{get;set;}
Organizations=GetOrganizations();
等待调度程序。开始启动((操作)(()=>
{
var allOrganizationItem=new OrganizationView(){ID=0,IsEnabled=true,Name=“(All)”};//它是一个类
组织。添加(allOrganizationItem);
cbOrganizations.DisplayMemberPath=“Name”;
cbOrganizations.SelectedValuePath=“ID”;
cbOrganizations.ItemsSource=null;
cbOrganizations.ItemsSource=Organizations;//设置包含所有项的数据源
cbOrganizations.SelectedItem=allOrganizationItem;//它将使其成为所选项目
}));   

在我的例子中,我手动添加了以下值:

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
    }));   
然后我选择了想要的一个:

myComboBox.Items.Add("MyItem");
而不是:

myComboBox.SelectedItem = "WantedItem";

哈哈……选择了valuepath=“Content”就是了。谢谢回答得很好,也帮了我。
myComboBox.Items.Add("MyItem");
myComboBox.SelectedItem = "WantedItem";
myComboBox.SelectedValue = "WantedItem";