Hi,
I would like to generally define my styles in the XAML, but add dynamic datatriggers on top in code-behind.
What I have in the xaml is like
<igDP:XamDataGrid.Resources>
<Style TargetType="{x:Type igDP:CellValuePresenter}">
<Setter Property="Background" Value="CadetBlue" />
</Style>
</igDP:XamDataGrid.Resources>
Somewhere in the code behind, I'd want to add, for example:
var dt = new DataTrigger
{
Binding = new Binding(bindingPath),
Value = true
};
dt.Setters.Add(new Setter(Control.BorderThicknessProperty, new Thickness(1)));
dt.Setters.Add(new Setter(Control.BorderBrushProperty, Brushes.Green));
Hello,
Thank you for your post. I have been looking through it and I created a sample project for you with the functionality you want. Basically I created a new Style, based on the one defined in XAML, and added a new Setter to it and then applied it to the XamDataGrid’s FieldSettings’ CellValuePresenterStyle Property. You can also add DataTriggers the same way. Please let me know if you need further clarification on this matter.
Looking forward for your reply.
Hi Stefan,
Thank you, this worked.
One further issue is I would like to bind the setter to an object that is a member property of my Record.DataItem
Currently I instantiate the member in a Grid_RecordAdded handler, eg:
((MyItem)e.Record.DataItem).MetaData = new ItemMetaData(e.Record.DataItem);
Unfortunately, it seems to only pick up the trigger binding item when I move on to another record. Is there a way to force rebinding in the Grid_RecordAdded handler?
Hello again,
I am glad that I helped you resolve your issue. As for your new question I am not that I completely understand it, but still I made some changes to the sample I send you before and reattached it. If this is not what you need, could you please be more specific on what you are trying to achieve.
Please see the attached project. As you can see, the data trigger does not kick in for a new record until you've moved off (eg: by pressing return).
I have been looking through your sample and I edited, so now it works as you want. Basically I added a handler for the XamCheckEditor and make it EndEditMode and StartEditMode whenever its value changes. This way the triggers are applied.
Hope this helps you
This works fine if the field is a a boolean, but what if the field driven the style is a text editor or combo box? is there a generic way of handling it?
I can say that if you have XamComboEditor or XamTextEditor you just need to make the same Handlers as the one for the XamCheckEditor. If I have misunderstood your question in some way feel free to write me.
It seems like I misunderstood you in some way. Now I attached the sample again and I believe it works as you want. The border changes its color, when the value of the XamCheckEditor changes. Please let me know if this is what you are trying to achieve or I have misunderstood you in some way.
I am not quite following, the basic issue is that, for a new record, it does not seem to update the style when you exit a cell, only when you exit the record.
In that case do not add a handler and the brush will be added, when the Editor exits edit mode. If I came up with a different approach I will update you.
Hope this helps you.
If I add the check handler to a text editor, every character i type will kick off endeditmode and starteditmode!
Is there a different approach to solving this?