Привязка данных в UserControl не работает во время разработки? - PullRequest
3 голосов
/ 28 февраля 2011

У меня небольшой вопрос относительно привязки данных и пользовательских элементов управления.

Я создаю (с использованием C # 2010) пользовательский элемент управления, который в основном является оберткой для ComboBox, и имеет собственное свойство, которое при изменении устанавливает значение ComboBox. И наоборот, если выбранный элемент в ComboBox изменится, значение свойства будет изменено.

Теперь я мог бы сделать это, перехватив событие «выбранное значение изменено» в ComboBox и установив свойство, и я мог бы в установщике свойств установить выбранное значение ComboBox, но я предположил, что мог бы также быть в состоянии сделать это с помощью DataBinding.

И это почти работает, но не совсем.

Он работает во время выполнения, но не во время разработки, и мне было интересно, можно ли это легко решить.

Например, если во время разработки я выбираю экземпляр своего пользовательского элемента управления и в окне свойств выбираю настраиваемое свойство моего элемента управления и изменяю его, ComboBox не отражает это изменение.

Любые указатели на то, что я пропустил, были бы с благодарностью приняты. Очевидно, что я мог бы установить выбранное значение ComboBox, но было бы хорошо, если бы 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);
     }
  }
}

1 Ответ

0 голосов
/ 01 марта 2011

У меня тоже работает!Окружающая среда - VS .Net 2008

Единственное отличие, которое, я думаю, может заключаться в «перестройке» приложения, а не в «сборке»?

...