0

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

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 在检索到要显示的记录时具有正确的值。

4

2 回答 2

0

我想你忘了绑定你选择的值

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

希望这可以帮助

于 2012-07-02T07:51:41.863 回答
-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;
于 2012-07-03T05:42:09.500 回答