C# UserControl中的数据绑定在设计时不工作?

C# UserControl中的数据绑定在设计时不工作?,c#,data-binding,user-controls,inotifypropertychanged,C#,Data Binding,User Controls,Inotifypropertychanged,我有一个关于数据绑定和用户控件的小问题 我使用C 2010构造了一个用户控件,它基本上是ComboBox的包装器,并且它有一个自定义属性,当更改该属性时,设置ComboBox的值。相反,如果组合框中的选定项发生更改,则属性的值也会更改 现在,我可以通过在ComboBox上捕获selected value changed事件并设置属性来实现这一点,我可以在属性设置器中设置ComboBox的selected value,但我猜想我也可以通过数据绑定实现这一点 它几乎起作用,但不完全起作用 它在运行时

我有一个关于数据绑定和用户控件的小问题

我使用C 2010构造了一个用户控件,它基本上是ComboBox的包装器,并且它有一个自定义属性,当更改该属性时,设置ComboBox的值。相反,如果组合框中的选定项发生更改,则属性的值也会更改

现在,我可以通过在ComboBox上捕获selected value changed事件并设置属性来实现这一点,我可以在属性设置器中设置ComboBox的selected value,但我猜想我也可以通过数据绑定实现这一点

它几乎起作用,但不完全起作用

它在运行时工作,但在设计时不工作,我想知道这是否可以很容易地解决

例如,如果在设计时选择用户控件的实例,然后从“属性”窗口选择控件的自定义属性并对其进行更改,则组合框不会反映更改

任何指向我错过的东西的提示都会被很好地接受。显然,我可以设置ComboBox的selected值,但如果数据绑定可以帮我做到这一点就好了

谢谢

这是我的用户控件。在窗体上放置一个并使用IDE更改Position属性

我也是! 环境-VS.NET2008


我认为唯一的区别可能是“重新构建”应用程序,而不仅仅是“构建”?

我删除了我的答案,因为当我尝试使用您的代码时,它只是按照您希望的方式工作。当我在设计时更改属性时,combobox会进行更新。所以肯定还有别的事情发生。嗨,这很奇怪,因为我刚刚做了这个:打开VS,新建Windows项目,添加新用户控件,用上面的代码替换代码,在用户控件上删除std combobox控件,构建,在窗体上删除用户控件,在属性窗口中更改位置属性,显示的用户控件仍然显示Unknown.Nope。我只是做了一个构建,但仍然不起作用。如果我在IDE中关闭表单,然后重新打开它,肯定会显示Position属性的正确项,但是更改Position属性不会更改combobox中的选定项。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;

namespace WindowsFormsApplication13
{
  public partial class UserControl1 : UserControl, INotifyPropertyChanged
  {
     public event PropertyChangedEventHandler PropertyChanged;

     public enum enumPosition : byte
     {
        Unknown, First, Second, Third
     }

     public UserControl1()
     {
        InitializeComponent();

        var bindingList = new BindingList<KeyValuePair<enumPosition, String>>();

        foreach (enumPosition value in Enum.GetValues(typeof(enumPosition)))
        {
           bindingList.Add(new KeyValuePair<enumPosition, String>(value, value.ToString()));
        }

        this.comboBox1.DisplayMember = "Value";
        this.comboBox1.ValueMember = "Key";
        this.comboBox1.DataSource = bindingList;

        this.comboBox1.DataBindings.Add("SelectedValue", this, "Position", false, DataSourceUpdateMode.OnPropertyChanged);
     }

     private enumPosition _position = enumPosition.Unknown;

     [DefaultValue(typeof(enumPosition), "Unknown")]
     public enumPosition Position
     {
        get { return _position; }
        set
        {
           if (value != _position)
           {
              _position = value;
              this.OnPropertyChanged(new PropertyChangedEventArgs("Position"));
           }
        }
     }

     private void OnPropertyChanged(PropertyChangedEventArgs e)
     {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, e);
     }
  }
}