2012-07-02 39 views
0

我在代码中创建窗口的一部分。对于组合框我这样做:未在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

感谢您的帮助,但它不工作。这是我从组合框中选择一个选项时得到的错误: 属性'IDParamClassOption'是对象的关键信息的一部分,无法修改。 只有一件事,我的combobox的datacontext没有设置。我只是获取记录并为每条记录创建一个控件。控件可以是TextBox,Combobox,Checkbox等。这就是不使用datacontext的原因 – Amanda

+0

@Amanda你可以使用'ObservableCollection '将不同的控件加载到DataContext中。 – Silvermind

相关问题