Question

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?

Was it helpful?

Solution

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.

OTHER TIPS

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

No, since databinding relies heavily on setting values on properties retrieved via reflection you will have a lot of trouble databinding and expecting the value to be set on a readonly property.

In this example you would be unable to databind to the Tax and Total properties.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top