سؤال

لدي مكون مخصص حيث نفذت INotifyPropertyChanged و IBindableComponent.

ومع ذلك ، عندما أحاول databind عقار مصمم يضيف هذا خط:

this.component11.TestString =
global::WindowsFormsApplication2.Properties.Settings.Default.Setting;

بدلا من إنشاء ملزمة كما هو الحال مع مربع نص:

this.textBox2.DataBindings.Add(new System.Windows.Forms.Binding(
   "Text",
   global::WindowsFormsApplication2.Properties.Settings.Default,
   "Setting2",
   true,
   System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));

وأود أن يكون الفكر مصمم ببساطة ننظر لنرى إذا IBindableComponent ينفذ إذا كان هو توليد ملزمة الترميز بدلا من إحالة القانون.

أي أفكار لماذا هذا يعمل مع النص وليس من عادتي العنصر ؟

هنا هو بلدي مكون مخصص:

public partial class Component1 : Component, INotifyPropertyChanged, IBindableComponent
    {
        public Component1()
        {
            InitializeComponent();
        }

        public Component1(IContainer container)
        {
            container.Add(this);

            InitializeComponent();
        }

        private string teststring;
        [Bindable(true)]
        public string TestString
        {
            get
            {
                return teststring;
            }
            set
            {
                if (teststring != value)
                {
                    teststring = value;
                    FirePropertyChanged("TestString");
                }
            }
        }

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        void FirePropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        #endregion

        #region IBindableComponent Members

        private BindingContext bindingContext = null;

        public BindingContext BindingContext
        {
            get
            {
                if (null == bindingContext)
                {
                    bindingContext = new BindingContext();
                }

                return bindingContext;
            }
            set { bindingContext = value; }
        }

        private ControlBindingsCollection databindings;

        public ControlBindingsCollection DataBindings
        {
            get
            {
                if (null == databindings)
                {
                    databindings = new ControlBindingsCollection(this);
                }
                return databindings;
            }
            set { databindings = value; }
        }

        #endregion
    }

print("code sample");
هل كانت مفيدة؟

المحلول

محاولة:

[ DesignerSerializationVisibility( DesignerSerializationVisibility.Hidden ),
  EditorBrowsable( EditorBrowsableState.Advanced ),
  Browsable( false ) ]
public BindingContext BindingContext {
    ...
}

[ ParenthesizePropertyName( true ),
  RefreshProperties( RefreshProperties.All ),
  DesignerSerializationVisibility( DesignerSerializationVisibility.Content ),
  Category( "Data" ) ]
public ControlBindingsCollection DataBindings {
   ...
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top