Установить SelectedItem WPF ComboBox - PullRequest
25 голосов
/ 02 августа 2010
<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)

Ответы [ 4 ]

42 голосов
/ 02 августа 2010

Существует много способов сделать это, но для вашего примера я бы изменил 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;

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

4 голосов
/ 28 февраля 2019

В моем случае я добавил значения вручную с помощью:

myComboBox.Items.Add("MyItem");

и затем я выбираю нужный с помощью:

myComboBox.SelectedItem = "WantedItem";

вместо:

myComboBox.SelectedValue = "WantedItem";
1 голос
/ 03 октября 2016

В этом случае вы можете просто использовать .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 голосов
/ 24 октября 2017

У меня отлично работает.

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
    }));   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...