ComboBox SelectedItem не показывает свое значение - PullRequest
1 голос
/ 12 июня 2011

У меня есть ComboBox, и все ComboBoxItem генерируются во время выполнения (программно). Всякий раз, когда есть ComboBox.SelectionChange, программа покажет MessageBox, показывая выбранное содержимое ComboBox

private void cb2_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    MessageBox.Show(cb2.SelectedItem.ToString());
}

Однако, покажи мне:

System.Windows.Controls.ComboBoxItem: Hello World

Я хочу показать только «Hello World», но не «System ....». Я попробовал SelectedValue, и это показывает то же самое.

Ответы [ 2 ]

2 голосов
/ 12 июня 2011

Вы должны рассмотреть возможность использования привязок, а не обработчиков событий. Это приводит к намного более чистому коду и большему разделению проблем между представлением и процессом:

Объявите свой комбо следующим образом:

<ComboBox x:Name="cboCountries" DisplayMemberPath="Name" SelectedItem="{Binding SelectedCountry}" ItemsSource="{Binding Countries}" />

Затем вы связываете свой ComboBox с коллекцией в вашем Window (или, предпочтительно, с ViewModel):

public Window1()
{
    InitializeComponent();

    DataContext = this;

    this.Countries = new ObservableCollection<Country>();
    this.Countries.Add(new Country {Id = 1, Name = "United Kingdom" });
    this.Countries.Add(new Country {Id = 1, Name = "United States" });
}

public ObservableCollection<Country> Countries {get; set;}

private Country selectedCountry;

public Country SelectedCountry
{
    get { return this.selectedCountry; }
    set 
    {
        System.Diagnostics.Debug.WriteLine(string.Format("Selection Changed {0}", value.Name));
        this.selectedCountry = value;
    }
}

Привязка выражения для свойства SelectedValue в комбинированном списке приведет к срабатыванию установщика свойства в SelectedCountry при каждом изменении выбранного элемента в комбинированном списке.

public class Country
{
    public int Id { get; set;}

    public string Name {get; set;}
}
2 голосов
/ 12 июня 2011

Вам необходимо привести выбранный элемент к ComboBoxItem и получить только его содержимое.

MessageBox.Show((cb2.SelectedItem as ComboBoxItem).Content.ToString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...