web-dev-qa-db-ja.com

WPF ComboBoxのSelectedItemを設定します

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

コードビハインドで選択したアイテムを現在の年に設定するにはどうすればよいですか?

何かのようなもの...

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

これを行うには多くの方法がありますが、あなたの例では、ComboBox-Tagを次のように変更します。

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

属性定義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;

...また、他の利点もあります。

42
HCL

私の場合、私は手動で値を追加しました:

myComboBox.Items.Add("MyItem");

そして、私は欲しいものを選択します:

myComboBox.SelectedItem = "WantedItem";

の代わりに:

myComboBox.SelectedValue = "WantedItem";
5
Simone Brognoli

この場合、単に.Text()を使用して設定できるはずです:

_cmbBudgetYear.Text = "2010";
_

ただし、変更後の値を取得するために、おそらくどこでも_SelectedValuePath="Content"_を設定しなかったため、またはSelectedValueを使用して設定しなかったためです(そして、なぜ私が言及しているのか)それ)、XAMLでSelectionChangedのイベントハンドラーを追加した後にこれを行う必要があるため、実際の値を決定するのは少し複雑になります。

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

少なくとも、これは私が遭遇したことです....この質問はボックスを設定することに関するものでしたが、それを取得する方法については話さずに設定のみに対処することはできません。変更された場合に取得します。

1
vapcguy

それは私のためにうまく機能します。

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