所选项目未显示在WPF组合框中

时间:2012-07-02 07:02:56

标签: wpf combobox

我正在代码中创建窗口的一部分。对于组合框,我这样做:

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具有正确的值。

2 个答案:

答案 0 :(得分:0)

我认为你忘了绑定你选择的值

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

希望这会有所帮助

答案 1 :(得分:-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;