Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DataBinding to a readonly property

Is it possible to bind a field (textbox) to a Property that doesn't implement a set?

For instance I have an object that implements INotifyPropertyChanged with 3 fields:

public decimal SubTotal
{
    get { return this.subTotal; }
    set 
    {
        this.subTotal = value;
        this.NotifyPropertyChanged("SubTotal");
        this.NotifyPropertyChanged("Tax");
        this.NotifyPropertyChanged("Total");
    }
}

public decimal Tax 
{
    get { return this.taxCalculator.Calculate(this.SubTotal, this.Region); }
}

public decimal Total
{
    get { return this.SubTotal + this.Tax; }
}

I can't quite test this yet as the UI isn't made and there is much other work to be done in this class before it will function, but is this possible the way I have it, or is there a different way?

like image 982
Steven Evers Avatar asked Jan 23 '23 07:01

Steven Evers


2 Answers

You can use such properties as source of data binding. Naturally, any such databinding would have to be OneWay and not TwoWay, so that changes to TextBox.Text will not be attempted to propagate back to the property (and fail because of it being readonly).

[EDIT] The above still holds for WinForms, but you don't need to care about OneWay/TwoWay. It will just never try to update the source if it's read-only.

like image 119
Pavel Minaev Avatar answered Jan 31 '23 17:01

Pavel Minaev


I just tried, it works fine. The binding engine doesn't try to update the read-only properties. It doesn't prevent editing the controls (unless you make them read-only) but the edited value is not persisted

like image 45
Thomas Levesque Avatar answered Jan 31 '23 17:01

Thomas Levesque