2010-08-02 9 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> 

Как установить выбранный элемент в текущий год в коде позади?Set SelectedItem WPF ComboBox

Что-то вроде ...

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

ответ

33

Там существует много способов сделать это, но для примера, я хотел бы изменить ComboBox-Tag следующим образом:

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

Я добавил attribute- defision 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; 

... и вы бы также и другие преимущества.

+4

Haha ... SelectedValuePath = "Содержимое". Благодаря! – knockando

+0

Отличный ответ, мне тоже помогли. – Califf

0

В этом случае, вы должны быть в состоянии просто использовать .Text(), чтобы установить его:

cmbBudgetYear.Text = "2010"; 

Для получения значения после изменения, хотя и может быть, это потому, что я не ставил SelectedValuePath="Content" везде, или возможно, потому, что я не использовал SelectedValue, чтобы установить его (и почему я упоминаю об этом), становится немного сложнее определить фактическое значение, так как вам нужно сделать это после добавления обработчика события для SelectionChanged в XAML:

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 
    })); 
Смежные вопросы