Как установить WPF Combobox SelectedValue по коду позади на основе пользовательского класса? - PullRequest
1 голос
/ 18 января 2012

Мне нужно выбрать пользовательский элемент под WPF Combobox по коду позади.Например: «Испанский»

 UILanguages languages = new UILanguages();                
                languages.Add(
                        new UILanguage
                        {
                            Culture = "en",
                            SpecCulture = "en-US",
                            EnglishName = "English"
                        });

                languages.Add(
                    new UILanguage
                    {
                        Culture = "es",
                        SpecCulture = "es-ES",
                        EnglishName = "Spanish"
                    });

                CollectionViewSource cvs = new CollectionViewSource
                {
                    Source = languages
                };

                cmbLanguages.SetBinding(ItemsControl.ItemsSourceProperty, new Binding { Source = cvs });

Разметка

  <ComboBox Grid.Column="1" Height="23" HorizontalAlignment="Left" Margin="0,1,0,0" 
              Name="cmbLanguages" VerticalAlignment="Top" Width="207"
           ItemsSource="{Binding Source={StaticResource UILanguagesViewSource}}" 
              />

Обратите внимание, что

, но это Установить SelectedItem WPF ComboBox и это Связывание WPF со списком из кода, стоящего за , совсем не помогает.

Любая подсказка?

Спасибо!

Ответы [ 2 ]

1 голос
/ 18 января 2012

Или в дополнение к ответу Рида вы можете ( псевдокод ) сначала связать со свойством

<ComboBox ... SelectedItem="{Binding Path=Selected}" />

В вашем UILanguage есть логическое свойство Selected

и из кода, выполняющего, что-то вроде этого

UILanguage lang = languages.FirstOrDefault(l => l.EnglishName == "MyLanguage");
lang.Selected = true;

// обновление привязки

Определенно больше кода, но чистое WPF кодирование, в данном случае.

1 голос
/ 18 января 2012

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

// Get first element with proper name from the bound source
cmdLanguages.SelectedValue = languages.FirstOrDefault(l => l.EnglishName == "Spanish");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...