<ComboBox Grid.Row="1" Grid.Column="0" Width="Auto" Name="cmbBudgetYear">
<ComboBoxItem Content="2009" />
<ComboBoxItem Content="2010" />
<ComboBoxItem Content="2011" />
<ComboBoxItem Content="2012" />
</ComboBox>
Comment définir l'élément sélectionné sur l'année en cours dans le code suivant?
Quelque chose comme...
cmbBudgetYear.SelectedItem = cmbBudgetYear.Items(
get the item with the Now.Year.ToString)
Il existe de nombreuses façons de procéder mais pour votre exemple, je modifierais le ComboBox-Tag comme suit:
<ComboBox Grid.Row="1" Grid.Column="0"
Name="cmbBudgetYear" SelectedValuePath="Content">
J'ai ajouté l'attribut-defition SelectedValuePath="Content"
. Après cela, vous pouvez définir la valeur avec une chaîne correspondante, par exemple:
cmbBudgetYear.SelectedValue = "2009";
Veillez à ce que la valeur soit une chaîne. Pour votre exemple, utilisez
cmbBudgetYear.SelectedValue = DateTime.Now.Year.ToString();
Une idée supplémentaire
Si vous utilisez le code-behind de toute façon, serait-il une possibilité de remplir la liste déroulante avec des entiers. Quelque chose comme:
for(int y=DateTime.Now.Year;y>DateTime.Now.Year-10;y--){
cmbBudgetYear.Items.Add(y);
}
..alors vous pouvez sélectionner des valeurs extrêmement simples comme
cmbBudgetYear.SelectedValue = 2009;
... et vous auriez aussi d'autres avantages.
Dans mon cas, j'ai ajouté les valeurs manuellement avec:
myComboBox.Items.Add("MyItem");
et puis je sélectionne le désiré avec:
myComboBox.SelectedItem = "WantedItem";
au lieu de:
myComboBox.SelectedValue = "WantedItem";
Dans ce cas, vous devriez pouvoir simplement utiliser .Text()
pour le définir:
cmbBudgetYear.Text = "2010";
Pour obtenir la valeur après un changement, cependant, c'est peut-être parce que je n'ai pas défini SelectedValuePath="Content"
partout, ou peut-être parce que je n'ai pas utilisé SelectedValue
pour le définir (et pourquoi je le mentionne), cela devient légèrement plus compliqué Déterminez la valeur réelle, comme vous devez le faire après avoir ajouté le gestionnaire d'événements pour SelectionChanged
dans le code 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());
}
Où un analyseur est nécessaire parce que .SelectedValue.ToString()
vous donnera quelque chose comme System.Windows.Controls.Control: 2010
, vous devez donc l'analyser pour obtenir la valeur:
private static string cboParser(string controlString)
{
if (controlString.Contains(':'))
{
controlString = controlString.Split(':')[1].TrimStart(' ');
}
return controlString;
}
Au moins, c’est ce que j’ai rencontré… Je sais que cette question portait sur le paramétrage de la boîte, mais je ne peux pas aborder le paramètre uniquement sans expliquer comment l’obtenir, plus tard également, car la manière dont vous définissez cette option déterminera comment vous l'obtenez s'il est changé.
Ça fonctionne bien pour moi.
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
}));