Как я могу связать пользовательское свойство формы окна со вторым свойством? - PullRequest
2 голосов
/ 16 апреля 2010

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

Это самый простой пример того, что я пытаюсь сделать:

public partial class Form2 : Form
{       
    public string MyTargetProperty { get; set; }
    public string OtherProperty { get; set; }

    public Form2()
    {
        InitializeComponent();
        this.DataBindings.Add("MyTargetProperty", this, "OtherProperty");        
    }

    private void button1_Click(object sender, EventArgs e)
    {
        MyTargetProperty = "test";
        Console.WriteLine("OtherProperty " + OtherProperty);
    }
}

Когда я нажимаю кнопку1, я вижу, что «OtherProperty» имеет то же значение, что и «MyTargetProperty». Я делаю что-то неправильно? Я что-то пропустил?

1 Ответ

3 голосов
/ 16 апреля 2010

Ваша форма должна реализовать INotifyPropertyChanged для MyTargetProperty.

Пример:

class FooForm : Form, INotifyPropertyChanged
{
    private int myTargetProperty;

    public int MyTargetProperty
    {
        get { return this.myTargetProperty; }
        set
        {
            this.myTargetProperty = value;

            this.OnPropertyChanged(
                new PropertyChangedEventArgs("MyTargetProperty"));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        var evt = this.PropertyChanged;

        if (evt != null)
            evt(this, e);
    }
}

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

this.DataBindings.Add(
    "OtherProperty", 
    this, 
    "MyTargetProperty", 
    false, 
    DataSourceUpdateMode.Never);

Это будет выполнять одностороннюю привязку. MyTargetProperty никогда не будет обновляться при изменении OtherProperty. Если вам нужна двусторонняя привязка, измените DataSourceUpdateMode, а также установите PropertyChanged для OtherProperty.

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