.NET WinForms INotifyPropertyChanged actualiza todos los enlaces cuando se cambia uno. ¿Mejor manera?

En una aplicación de formularios de Windows, un cambio de propiedad que activa INotifyPropertyChanged, hará que el formulario lea CADA propiedad de mi objeto enlazado, no solo la propiedad cambiada. (Vea el código de ejemplo a continuación)

Esto parece un desperdicio absurdo ya que la interfaz requiere el nombre de la propiedad cambiante. Está causando mucho tiempo en mi aplicación porque algunos de los captadores de propiedades requieren que se realicen cálculos.

Es probable que necesite implementar algún tipo de lógica en mis captadores para descartar las lecturas innecesarias si no hay una mejor manera de hacerlo.

¿Me estoy perdiendo de algo? ¿Hay una mejor manera? No diga que use una tecnología de presentación diferente, lo estoy haciendo en Windows Mobile (aunque el comportamiento también ocurre en el marco completo).

Aquí hay un código de juguete para demostrar el problema. Al hacer clic en el botón, AMBOS cuadros de texto se llenarán aunque haya cambiado una propiedad.

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));
        }
    }
}

}

Respuestas a la pregunta(2)

Su respuesta a la pregunta