I'm trying to bind a list of custom data objects to a data grid and achieve the following behavior.
- Populate the grid
- Disable certain cells based on object data.
Consider the following DataGrid
<DataGrid ItemsSource="{Binding Path=CustomObjectList}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=FieldName}"
Header="Field Name"
IsReadOnly="True" />
<DataGridCheckBoxColumn Binding="{Binding Path=Compare}"
Header="Compare" />
<DataGridTextColumn Binding="{Binding Path=Tolerance}"
Header="Tolerance" />
</DataGrid.Columns>
</DataGrid>
With a backing object like this...
public class CustomObject: BaseModel
{
private bool _compare;
private bool _disableTolerance;
private string _fieldName;
private bool _mustCompare;
private double _tolerance;
/// <summary>
/// Gets or sets the compare.
/// </summary>
/// <value>The compare.</value>
public bool Compare
{
get
{
return this._compare;
}
set
{
this._compare = value;
this.NotifyPropertyChange("Compare");
}
}
/// <summary>
/// Gets or sets the disable tolerance.
/// </summary>
/// <value>The disable tolerance.</value>
public bool DisableTolerance
{
get
{
return this._disableTolerance;
}
set
{
this._disableTolerance = value;
this.NotifyPropertyChange("DisableTolerance");
}
}
/// <summary>
/// Gets or sets the name of the field.
/// </summary>
/// <value>The name of the field.</value>
public string FieldName
{
get
{
return this._fieldName;
}
set
{
this._fieldName = value;
this.NotifyPropertyChange("FieldName");
}
}
/// <summary>
/// Gets or sets the must compare.
/// </summary>
/// <value>The must compare.</value>
public bool MustCompare
{
get
{
return this._mustCompare;
}
set
{
this._mustCompare = value;
this.NotifyPropertyChange("MustCompare");
}
}
/// <summary>
/// Gets or sets the tolerance.
/// </summary>
/// <value>The tolerance.</value>
public double Tolerance
{
get
{
return this._tolerance;
}
set
{
this._tolerance = value;
this.NotifyPropertyChange("Tolerance");
}
}
}
And you can consider the CustomObjectList to be populated like this...
this.ComparisonsAndTolerances.Add(new ComparisonSettingsTolerances()
{
FieldName = "Alpha",
Compare = true,
MustCompare = true,
Tolerance = 0,
DisableTolerance = false
});
this.ComparisonsAndTolerances.Add(new ComparisonSettingsTolerances()
{
FieldName = "Bravo",
Compare = true,
MustCompare = false,
Tolerance = 0,
DisableTolerance = true
});
So, of course the FieldName, Compare, and Tolerance properties are filling into the grid appropriately.
However, what I would like to achieve is, when MustCompare is true, then that cell is marked as read only. And when DisableTolerance is true, that cell is marked as read only.
Obviously this will vary from cell to cell and row to row with the 4 different combinations, but I was hoping to achieve this through binding.
I tried
IsReadOnly="{Binding Path=MustCompare}"
and
IsReadOnly="{Binding Path=CustomObjectList/MustCompare}"
But neither of those worked.
Thanks.