2012-07-02 4 views
0

Я создаю часть своего окна в коде. Для комбобоксе я это делаю:Выбранный элемент, который не отображается в combobox WPF

ObservableCollection<ParamClassOption> options = new ObservableCollection<ParamClassOption>(
context.ParamClassOptions.Where(x => x.IDParamClass == val.CompTypeParam.IDParamClass)); 

ComboBox combobox = new ComboBox(); 
combobox.Name = "combobox" + val.CompTypeParam.ParameterName.Replace(" ", ""); 
combobox.ItemsSource = options; 
combobox.SelectedValuePath = "IDParamClass"; 
combobox.DisplayMemberPath = "OptionName"; 
if (val.ParamClassOption != null) 
{ 
    combobox.SelectedValue = val.ParamClassOption.IDParamClassOption; 
} 
layoutitem.Content = combobox; 

Я могу выбрать элемент из списка и сохранить его в базу данных. Проблема, которая у меня возникает, - снова показать сохраненное значение после извлечения значений из базы данных. Любая идея, почему она не отображается? val.ParamClassOption.IDParamClassOption во второй-последней строке выше имеет правильное значение, когда запись извлекается для отображения.

ответ

-1

Спасибо за помощь. В итоге я использовал совершенно другой подход, добавляя элементы в поле со списком один за другим. Затем я устанавливаю выбранный элемент в ранее добавленное значение (используя свойство Text). Вот что мой код выглядит сейчас:

  if (controlType == "Combobox") 
      { 
       ComboBox combobox = new ComboBox(); 
       combobox.Name = "combobox" + val.CompTypeParam.ParameterName.Replace(" ", ""); 

       ObservableCollection<ParamClassOption> options = new ObservableCollection<ParamClassOption>(
        context.ParamClassOptions.Where(x => x.IDParamClass == val.CompTypeParam.IDParamClass)); 
       combobox.Items.Clear(); 
       foreach (ParamClassOption option in options) 
       { 
        ComboBoxItem item = new ComboBoxItem(); 
        item.Content = option.OptionName; 
        combobox.Items.Add(item); 
       } 
       combobox.Text = val.ParamClassOption.OptionName; 

       layoutitem.Content = combobox; 
      } 

Позже при чтении значения из выпадающего списка, чтобы сохранить в базе данных я сделал это:

ObservableCollection<ParamClassOption> option = new ObservableCollection<ParamClassOption>(
    context.ParamClassOptions.Where(o => o.IDParamClass == value.CompTypeParam.IDParamClass).Where(o => o.OptionName == combobox.Text)); 
value.IDParamClassOption = option[0].IDParamClassOption; 
0

я думаю, что вы забыли связать выбранное значение

var binding = new Binding {Path = new PropertyPath("IDParamClassOption"), Mode = BindingMode.TwoWay, Source = val.ParamClassOption}; 
combobox.SetBinding(ComboBox.SelectedValueProperty, binding); 

надеюсь, что это помогает

+0

Спасибо за помощь, но она не работает , Это ошибка, которую я получаю, когда я выбираю один из параметров из combobox: Свойство IDParamClassOption является частью ключевой информации объекта и не может быть изменено. Только одно, мой набор данных combobox не установлен. Я просто получаю записи и создаю элемент управления для каждой записи. Элементы управления могут быть TextBox, Combobox, Checkbox и т. Д. Это причина не использования datacontext – Amanda

+0

@Amanda. Вы можете использовать 'ObservableCollection ' для загрузки различных элементов управления в DataContext. – Silvermind

Смежные вопросы