Любые идеи о том, как заставить пользовательский интерфейс реагировать при изменении свойства в классе? - PullRequest
2 голосов
/ 26 июля 2011

Например, у меня есть небольшой класс:

public class SednaTreeViewItem
{
    public string ValueMember { get; set; }
    public string DisplayMember { get; set; }

    public SednaTreeViewItem(string valueMember, string displayMember)
    {
        ValueMember = valueMember;
        DisplayMember = displayMember;
    }
}

Затем я использую его в пользовательском элементе управления следующим образом:

/// <summary>
/// SednaTreeViewItem that is currently selected in the SednaTreeView.
/// </summary>
public SednaTreeViewItem SelectedItem
{
    get 
    {
        if (ultraTree.SelectedNodes.Count > 0)
        {
            var node = ultraTree.SelectedNodes[0];
            return treeNodes.FirstOrDefault(x => x.ValueMember == node.Key);
        }
        else
            return null;                
    }

    set 
    {
        if (value != null)
        {
            ultraTree.ActiveNode = ultraTree.Nodes[value.ValueMember];
            ultraTree.Select();
        }                
    }
}

Затем в фактической форме, которая использует этого пользователяэлемент управления, я хотел бы захватывать всякий раз, когда .Text изменяется в текстовом поле, чтобы этот текст также изменялся в пользовательском элементе управления, который является древовидным.

private void txtInvestor_TextChanged(object sender, EventArgs e)
{
    treeViewInvestors.SelectedItem.DisplayMember = txtInvestor.Text;
}

Проблема в том, что когда яизменено значение .DisplayMember, ничего не запускается, чтобы дать древовидной структуре знать, когда обновлять отображаемый текст узла.

Есть ли у вас какие-либо предложения о том, как это реализовать?

Ответы [ 2 ]

2 голосов
/ 26 июля 2011

Использовать привязку управления как:

this.txtInvestor.DataBindings.Add("Text", this, "SelectedItem", false, DataSourceUpdateMode.OnPropertyChanged);
0 голосов
/ 26 июля 2011

Вы должны создать событие для своего свойства класса, а затем зарегистрировать это событие в своем классе пользовательского интерфейса.

Принятый ответ по следующей ссылке должен вам помочь:

C #: создание событий для класса в свойствах GET / SET

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