У меня небольшой вопрос относительно привязки данных и пользовательских элементов управления.
Я создаю (с использованием 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);
}
}
}