2015-04-06 1 views
0

Есть и другие сообщения об этом, но ничего, что соответствует моей ситуации при программной настройке выбранного значения.Программно установить связанный с данными выпадающий список при запуске окна

У меня есть окно WPF со списком и как вход в это окно, у меня есть значение ID, которое соответствует значениям в этой привязке с привязкой к данным. Я пробовал несколько способов установить combobox.SelectedItem или combobox.SelectedIndex и т. Д., И каждый раз значение не изменяется. Глядя глубже, поскольку я выполняю это действие из конструктора окна после вызова InitializeComponent(). К сожалению, элементы combobox.Items не заполнены, поэтому список Items имеет число 0. Связывание происходит правильно, но, очевидно, каким-то образом оно не подключается до завершения конструктора окна.

Это урезана XAML для выпадающего списка:

<ComboBox Name="Combobox_cmb" Grid.Column="0" Grid.Row="0" ItemsSource="{Binding Path=Names}" DisplayMemberPath="Name" SelectedValuePath="Name" SelectionChanged="Name_cmb_SelectionChanged" /> 

Конечно «Имена» является наблюдаемым список, который загружается, прежде чем пытаться установить выбранное значение. Несмотря на то, что список back end заполнен, если я смотрю на Combobox_cmb.Items после заполнения списка и перед установкой выбранного значения, Combobox_cmb.Items пуст.

Есть ли способ передать значение в окно и присвоить значение по умолчанию для этого элемента?

Благодаря

+0

Как вы создаете экземпляр окна, и используете ли вы шаблон MVVM и/или любые рамки MVVM? – goobering

ответ

0

Вы судимое это делать в случае Window.Loaded? Попробуйте сделать это:

public YourWindow() 
{ 
    InitializeComponent(); 
    this.Loaded += Window_Loaded; 
    this.Datacontext = viewmodel // if you'r going with MVVM 
} 

public void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    Combobox_cmb.ItemsSource = ((Viewmodel)this.DataContext).Names; //Names should be in your viewmodel if you're going with MVVM. If not just use DataContext as this codebehind and place the list here. 
} 

Не знаю, помогает ли это, потому что я не могу контекстуализировать ответ. Может быть, немного больше кода.

+0

Спасибо. Это сработало отлично. Я должен был подумать об этом раньше. Наверное, я слишком узкий. Еще раз спасибо. – user2975847

+0

Ницца! Рад, что смог помочь! : D Просто пометьте ответ как правильный, чтобы будущие люди могли видеть его быстрее;) – Ninglin