【问题标题】:Selected item not showing in a WPF combobox所选项目未显示在 WPF 组合框中
【发布时间】:2012-07-02 07:02:55
【问题描述】:

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

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

【问题讨论】:

    标签: wpf combobox


    【解决方案1】:

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

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

    希望对你有帮助

    【讨论】:

    • 感谢您的帮助,但它不起作用。这是我从组合框中选择一个选项时遇到的错误:属性“IDParamClassOption”是对象关键信息的一部分,无法修改。只有一件事,我的组合框的数据上下文没有设置。我只是获取记录并为每条记录创建一个控件。控件可以是文本框、组合框、复选框等。这就是不使用数据上下文的原因
    • @Amanda 您可以使用 ObservableCollection&lt;object&gt; 将不同的控件加载到 DataContext 中。
    【解决方案2】:

    感谢您的帮助。我最终使用了一种完全不同的方法,将项目一个一个地添加到组合框中。然后,我将所选项目设置为先前添加的值(使用 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      相关资源
      最近更新 更多