簡體   English   中英

UserControl 中的數據綁定在設計時不起作用?

[英]DataBinding within a UserControl not working at design time?

我有一個關於數據綁定和用戶控件的小問題。

我構造(使用 C# 2010)一個用戶控件,它基本上是 ComboBox 的包裝器,它有一個自定義屬性,當更改時,設置 ComboBox 的值。 相反,如果 ComboBox 中的選定項發生變化,則該屬性的值也會發生變化。

現在,我可以通過在 ComboBox 上捕獲“selected value changed”事件並設置屬性來做到這一點,我可以在屬性設置器中設置 ComboBox 的選定值,但我推測我也可以做到這與數據綁定。

它幾乎有效,但不完全有效。

它在運行時有效,但在設計時無效,我想知道這是否可以輕松解決。

例如,如果在設計時,我選擇了我的用戶控件的實例,並從屬性窗口中選擇了我的控件的自定義屬性並對其進行了更改,則 ComboBox 不會反映更改。

任何指向我錯過的東西的指針都會受到極大的歡迎。 顯然,我可以設置 ComboBox selected 值,但如果 DataBinding 為我做這件事會很好。

謝謝

(這是我的用戶控件。在窗體上放置一個並使用 IDE 更改“位置”屬性)

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);
     }
  }
}

也適用於我! 環境 - VS .Net 2008

我認為唯一的區別可能是“重新構建”應用程序,而不僅僅是“構建”?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM