.NET WinForms INotifyPropertyChanged обновляет все привязки при их изменении. Лучший путь?

В приложении Windows Form изменение свойства, которое вызывает INotifyPropertyChanged, приведет к тому, что форма будет читать КАЖДОЕ свойство из моего связанного объекта, а не только измененное свойство. (См. Пример кода ниже)

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

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

Я что-то пропустил? Есть ли способ лучше? Не говорите, чтобы использовать другую технологию представления, пожалуйста - я делаю это на Windows Mobile (хотя поведение происходит и на полной основе).

Вот некоторый игрушечный код, чтобы продемонстрировать проблему. Нажатие на кнопку приведет к заполнению обоих текстовых полей, даже если одно свойство было изменено.

using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;

namespace Example
{
public class ExView : Form
{
    private Presenter _presenter = new Presenter();
    public ExView()
    {
        this.MinimizeBox = false;

        TextBox txt1 = new TextBox();
        txt1.Parent = this;
        txt1.Location = new Point(1, 1);
        txt1.Width = this.ClientSize.Width - 10;
        txt1.DataBindings.Add("Text", _presenter, "SomeText1");

        TextBox txt2 = new TextBox();
        txt2.Parent = this;
        txt2.Location = new Point(1, 40);
        txt2.Width = this.ClientSize.Width - 10;
        txt2.DataBindings.Add("Text", _presenter, "SomeText2");

        Button but = new Button();
        but.Parent = this;
        but.Location = new Point(1, 80);
        but.Click +=new EventHandler(but_Click);
    }

    void but_Click(object sender, EventArgs e)
    {
        _presenter.SomeText1 = "some text 1";
    }
}

public class Presenter : INotifyPropertyChanged
{

    public event PropertyChangedEventHandler PropertyChanged;

    private string _SomeText1 = string.Empty;
    public string SomeText1
    {
        get
        {
            return _SomeText1;
        }
        set
        {
            _SomeText1 = value;
            _SomeText2 = value; // <-- To demonstrate that both properties are read
            OnPropertyChanged("SomeText1");
        }
    }

    private string _SomeText2 = string.Empty;
    public string SomeText2
    {
        get
        {
            return _SomeText2;
        }
        set
        {
            _SomeText2 = value;
            OnPropertyChanged("SomeText2");
        }
    }

    private void OnPropertyChanged(string PropertyName)
    {
        PropertyChangedEventHandler temp = PropertyChanged;
        if (temp != null)
        {
            temp(this, new PropertyChangedEventArgs(PropertyName));
        }
    }
}

}

Ответы на вопрос(2)

Ваш ответ на вопрос