it-swarm.com.de

Setze SelectedItem von WPF ComboBox

<ComboBox Grid.Row="1" Grid.Column="0" Width="Auto" Name="cmbBudgetYear">
   <ComboBoxItem Content="2009" />
   <ComboBoxItem Content="2010" />
   <ComboBoxItem Content="2011" />
   <ComboBoxItem Content="2012" />
</ComboBox>

Wie stelle ich den ausgewählten Artikel im Code dahinter auf das aktuelle Jahr ein?

So etwas wie...

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

Es gibt viele Möglichkeiten, dies zu tun, aber für Ihr Beispiel würde ich das ComboBox-Tag wie folgt ändern:

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

Ich habe die Attribut-Defition SelectedValuePath="Content" hinzugefügt. Danach können Sie den Wert mit einer entsprechenden Zeichenfolge festlegen, z.

cmbBudgetYear.SelectedValue = "2009";

Achten Sie darauf, dass der Wert ein String sein muss. Verwenden Sie für Ihr Beispiel

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

Eine zusätzliche Idee

Wenn Sie den Code-Behind trotzdem verwenden, wäre es eine Möglichkeit, die Combobox mit ganzen Zahlen zu füllen. Etwas wie:

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

..dann können Sie die Werte extrem einfach auswählen 

cmbBudgetYear.SelectedValue = 2009;

... und Sie hätten auch andere Vorteile.

40
HCL

In meinem Fall habe ich die Werte manuell hinzugefügt mit:

myComboBox.Items.Add("MyItem");

und dann wähle ich das Gesuchte mit:

myComboBox.SelectedItem = "WantedItem";

anstatt: 

myComboBox.SelectedValue = "WantedItem";
4
Simone Brognoli

In diesem Fall sollten Sie einfach .Text() verwenden können, um es einzustellen:

cmbBudgetYear.Text = "2010";

Für das Erhalten des Werts nach einer Änderung, und vielleicht, weil ich SelectedValuePath="Content" nicht überall gesetzt habe, oder vielleicht, weil ich SelectedValue nicht verwendet habe, um es einzustellen (und warum ich es erwähne), wird es etwas komplizierter Ermitteln Sie den tatsächlichen Wert, da Sie dies tun müssen, nachdem Sie den Ereignishandler für SelectionChanged in der XAML hinzugefügt haben:

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

Wo ein Parser benötigt wird, da .SelectedValue.ToString() etwas wie System.Windows.Controls.Control: 2010 anzeigt, müssen Sie ihn auslesen, um den Wert zu erhalten:

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

Zumindest bin ich darauf gestoßen ... Ich weiß, diese Frage bezog sich auf das Setzen der Box, kann aber nicht nur Einstellungen betreffen, ohne darüber zu reden, wie man sie später bekommt, da es wie bestimmt wird, wie sie eingestellt wird Sie bekommen es, wenn es geändert wird.

1
vapcguy

Es funktioniert gut für mich.

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