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

¿Cómo configuro el elemento seleccionado para el año actual en el código?Establecer SelectedItem de WPF ComboBox

Algo así como ...

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

Respuesta

33

Existen muchas maneras de hacer esto, pero por su ejemplo, me gustaría cambiar el ComboBox-etiqueta de la siguiente manera:

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

he añadido el atributo, defition SelectedValuePath="Content". Después de que se puede establecer el valor de una cadena correspondiente, por ejemplo .:

cmbBudgetYear.SelectedValue = "2009"; 

Tenga cuidado de que el valor debe ser una cadena. Por su ejemplo, utilizar

cmbBudgetYear.SelectedValue = DateTime.Now.Year.ToString(); 

Una idea adicional

Si utiliza el código subyacente de todos modos, sería una posibilidad para llenar el cuadro combinado con enteros. Calle detrás como:

for(int y=DateTime.Now.Year;y>DateTime.Now.Year-10;y--){ 
cmbBudgetYear.Items.Add(y); 
} 

..then puede seleccionar los valores extremadamente simples como

cmbBudgetYear.SelectedValue = 2009; 

... y que tendría también otras ventajas.

+4

Haha ... SelectedValuePath = "Contenido" was it. ¡Gracias! – knockando

+0

Excelente respuesta, me ayudó también. – Califf

0

En este caso, usted debería ser capaz de utilizar simplemente .Text() para configurarlo:

cmbBudgetYear.Text = "2010"; 

Para obtener el valor después de un cambio, sin embargo, y tal vez es porque no me puse SelectedValuePath="Content" en todas partes, o tal vez porque no usé SelectedValue para configurarlo (y por qué lo menciono), se vuelve un poco más complicado determinar el valor real, ya que tienes que hacer esto después de agregar el controlador de eventos para SelectionChanged en el 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()); 
} 

Cuando se necesita un analizador porque .SelectedValue.ToString() le dará algo así como System.Windows.Controls.Control: 2010, así que hay que analizar a cabo para obtener el valor:

private static string cboParser(string controlString) 
{ 
    if (controlString.Contains(':')) 
    { 
     controlString = controlString.Split(':')[1].TrimStart(' '); 
    } 
    return controlString; 
} 

Al menos, esto es lo que me encontré .... Sé que esto La pregunta era sobre la configuración de la caja, pero no puede abordar solo la configuración sin hablar de cómo obtenerla, más tarde, también, ya que la forma en que la configuró determinará cómo la obtendrá si se cambia.

0

Funciona bien para mí.

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