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?
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With