Hi there
I know I can easily bind *to* a grid's active item by setting a binding using the ActiveRecord.DataItem property. However, how can I do it the other way round? I don't see a converter as a solution: The converter does not have a context (the grid), and this context cannot be assigned through a binding property because that would lead to a circular reference (if I declare it first, the binding fails, if I declare it later, the grid does not see the converter):
<UserControl.Resources> <!-- this binding does not work - the grid has not been created yet --> <conv:ActiveGridRowConverter x:Key="rowConverter" Grid="{Binding ElementName=contactGrid, Mode=OneTime}" /></UserControl.Resources><igDP:XamDataGrid x:Name="contactGrid" DataSource="{Binding Path=ContactStore.Contacts}" ActiveRecord="{Binding Path=ActiveContact.Contact, Converter={StaticResource rowConverter}}" />
I'm not sure whether I'm just overlooking the obvious - what's the recommended solution here?
Thanks,
Philipp
Hi Joe
Your assumption is correct (I wanted to go that way because I don't see a simpler solution to setting the active record). However, ActiveContact is part of my view model and therefore unaware of grids or any other UI controls. Is it possible that the grid exposes somewhat of a design flaw here? ActiveRecord is a pretty "WinFormish" strategy and - as it appears - a one way street when it comes to binding objects. IMO, an ActiveItem property was the way to go...
Any idea for a workaround? I honestly can't imagine thatI'm the first person to set the active item through a binding expression
Cheers
Philpp
Hi Sébastien,
I'm not sure this is related to the ActiveDataItem property.
What you are seeing might be the result of a quirk in how 2-way bindings work. When a property value changes and gets pushed from the source to the target (or vice versa) if the receiving object synchronously changes the value to something else, the updated value doesn't get pushed back.
Could this be what is happening?
If so you can take adavntage of another quirk in 2-way bindings to get around the issue. It seems that if there is a Converter specified on the binding then the value does get pushed back. So try implementing an IValueConverter that just returns the passed in value for both methods and see if that solves the issue.
Hi,
Thanks for your answer, but it doesn't solve my problem... Here is my xaml implementation :
<igDP:XamDataGrid x:Name="XamDataGrid1" Theme="Office2k7Black" DataSource="{Binding Path=Sieges, Mode=TwoWay}" ActiveDataItem="{Binding Path=ObjetCourant, Mode=TwoWay, Converter={StaticResource activeDataItemConverter
}}">
And the converter :
public class ActiveDataItemConverter : IValueConverter
{
#region
IValueConverter Members
public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) {
return value;
}
public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) {
#endregion
The Convert method is never hit when I mark it with a breakpoint and modify the binded property... Are you sure that the TwoWay mode is supported ?
Sébastien
All we are doing is exposing a DependencyProperty so yes 2-way binding should work.
In the Output window are you getting any binding error msgs releating to this?
How is your ObjetCourant implemented? Is it a DependencyProperty or just a CLR property? If a CLR property does the class that exposes it implement INotifyPropertyChanged?
I have a same issue. from activeitem to my INotifyPropertyChanged property, it's working (if i click something, my SelectedObject is changed to the clickedvalue). but when my bound object changed, the activeItem didn't change.
Hi, this issue is still a problem for me too.
@Joe : could you provide a test solution to see this functionality working ?
Attached is a simple project that shows 2-way binding to ActiveDataItem working.