Связывание данных с пользовательским элементом управления - PullRequest
7 голосов
/ 03 марта 2009

У меня есть пользовательский элемент управления (форма Windows), который представляет собой текстовое поле поиска. Свойством в элементе управления является Current Selection, который представляет собой пользовательский объект, содержащий «Identifier», «Code» и «Description». Это свойство привязано к данным с использованием BindingSource.

Отображение информации прекрасно работает. С другой стороны, независимо от того, установлен ли для параметра «Обновление» значение OnValidate или OnValueChange, он никогда не обновляет BindingSource. Что-то мне не хватает, чтобы получить это для автоматического обновления?

private System.Windows.Forms.BindingSource buildPlanComponentDataBindingSource;

    public void LoadBuildPlan(string itemNumber)
    {
        var buildPlanComponents = BuildPlan.LoadBuildPlanComponents(itemNumber, AutomaticPrice);
        buildPlanComponentDataBindingSource.DataSource = buildPlanComponents;
        AssemblyNumber = itemNumber;
    }




[Bindable(true)]
[DefaultValue(null)]
public ILookupSelection CurrentSelection
{
    get
    {
        if (currentSelection == null)
            currentSelection = new LookupSelection {Code = txtLookup.Text};

        return currentSelection;
    }

    set
    {
        if (value == null) return;

        currentSelection = value;

        SetText(currentSelection, DisplayText);
        SetDescription(currentSelection, DisplayDescription);
    }
}

Ответы [ 3 ]

2 голосов
/ 03 марта 2009

Реализация INotifyPropertyChanged, похоже, является решением!

    #region IPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
    }

    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        if (null != PropertyChanged)
        {
            PropertyChanged(this, e);
        }
    }

    #endregion
0 голосов
/ 04 июня 2010

Может быть, вам нужно заставить DataBinding записывать свое значение для каждого элемента управления, значение которого вы устанавливаете таким образом?

Предполагается одна привязка данных для текстового поля с именем txtMySetValue:

txtMySetValue.DataBindings [0] .WriteValue ();

0 голосов
/ 03 марта 2009

Отображение информации работает отличный. С другой стороны, независимо от установить ли обновление на OnValidate или OnValueChange никогда не обновляет BindingSource.

Глядя на твой код, я на самом деле не уверен в этом. В вашем наборе вы проверяете на ноль и отказ; если данные на самом деле содержат нуль (то, что вы описываете), ваш контроль будет не синхронизирован. Интересно, возможно, эта проверка маскирует основную проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...