or
private TestDB testDB;
public MainWindow()
{
InitializeComponent();
testDB = new testDBEntities();
radGridView.ItemsSource = testDB.Person;
}
private void radGridView_AddingNewDataItem(object sender, GridViewAddingNewEventArgs e) { e.NewObject = new Person(); testDB.Persons.Add((Person)e.NewObject); } private void radGridView_RowEditEnded(object sender, GridViewRowEditEndedEventArgs e) { if (e.EditAction == GridViewEditAction.Cancel) return; if (e.EditOperationType == GridViewEditOperationType.Edit) { testDB.SaveChanges(); radGridView.Rebind(); } else if (e.EditOperationType == GridViewEditOperationType.Insert) { testDB.SaveChanges(); radGridView.Rebind(); } }My MVVM app loads user defined polygons from a DB and then databinds the information layer (after the map is initialised, as suggested in the documentation).
When I explicitly declare the colours in the data template the binding works perfectly. But when I data bind the colours (using a converter to convert them to a SolidColorBrush) it doesn't display the shapes at all.
Here's the XAML...
<telerik:RadMap x:Name="mapControl" Center="53.54245,-2.298817" ZoomLevel="7"> <telerik:InformationLayer x:Name="shapeLayer" Visibility="Visible"> <telerik:InformationLayer.ItemTemplate> <DataTemplate> <telerik:MapPolyline Fill="{Binding Fill, Converter={StaticResource converter}}" Opacity="0.5" Points="{Binding Points}" Stroke="{Binding Stroke, Converter={StaticResource converter}}" StrokeThickness="2" /> </DataTemplate> </telerik:InformationLayer.ItemTemplate> </telerik:InformationLayer></telerik:RadMap>
Here's the view model that I'm using for each shape.
public class ShapeViewModel : ViewModelBase
{
private LocationCollection _points;
private Color _stroke;
private Color _fill;
public LocationCollection Points
{
get { return _points; }
set
{
if (_points != value)
{
_points = value;
OnPropertyChanged(() => Points);
}
}
}
public Color Fill
{
get { return _fill; }
set
{
if (_fill != value)
{
_fill = value;
OnPropertyChanged(() => Fill);
}
}
}
public Color Stroke
{
get { return _stroke; }
set
{
if (_stroke != value)
{
_stroke = value;
OnPropertyChanged(() => Stroke);
}
}
}
}
I don't see any binding errors in my output window.
Thanks
Ben
protected override void OnAttached() { AssociatedObject.DataLoaded += AssociatedObject_DataLoaded; AssociatedObject.RowEditEnded += AssociatedObject_RowEditEnded; base.OnAttached(); } void AssociatedObject_RowEditEnded(object sender, GridViewRowEditEndedEventArgs e) { // This is the call to Rebind that causes the exception AssociatedObject.Rebind(); } protected override void OnDetaching() { AssociatedObject.DataLoaded -= AssociatedObject_DataLoaded; AssociatedObject.RowEditEnded -= AssociatedObject_RowEditEnded; base.OnDetaching(); } void AssociatedObject_DataLoaded(object sender, EventArgs e) { UpdateTotalLengths(); UpdateComponentNumber(); } private void UpdateComponentNumber() { Int32 index = 1; foreach (MyComponent component in AssociatedObject.Items.OfType<MyComponent>()) { component.Number = index; index++; } } private void UpdateTotalLengths() { var totalLength = 0d; foreach (var component in AssociatedObject.Items.OfType<MyComponent>()) { totalLength += component.Length; component.TotalLength = totalLength; } }at Telerik.Windows.Controls.ParentOfTypeExtensions.<GetParents>d__0.MoveNext() in c:\TB\102\WPF_Scrum\Release_WPF\Sources\Development\Core\Controls\Extensions\ParentOfTypeExtensions.cs:line 74at System.Linq.Enumerable.<OfTypeIterator>d__aa`1.MoveNext()at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)at Telerik.Windows.Controls.GridView.GridViewCell.HandlePendingEdit(UIElement focusedElement) in c:\TB\102\WPF_Scrum\Release_WPF\Sources\Development\Controls\GridView\GridView\GridView\Cells\GridViewCell.cs:line 1021at Telerik.Windows.Controls.GridView.GridViewCell.HandlePendingEditOnLostFocus() in c:\TB\102\WPF_Scrum\Release_WPF\Sources\Development\Controls\GridView\GridView\GridView\Cells\GridViewCell.cs:line 899at Telerik.Windows.Controls.GridView.GridViewDataControl.HandleLostFocus(DependencyObject focusedDependencyObject) in c:\TB\102\WPF_Scrum\Release_WPF\Sources\Development\Controls\GridView\GridView\GridView\GridViewDataControl.Editing.cs:line 508at Telerik.Windows.Controls.GridView.GridViewDataControl.HandleLostFocus() in c:\TB\102\WPF_Scrum\Release_WPF\Sources\Development\Controls\GridView\GridView\GridView\GridViewDataControl.Editing.cs:line 456at Telerik.Windows.Controls.GridView.GridViewDataControl.OnLostFocus(RoutedEventArgs e) in c:\TB\102\WPF_Scrum\Release_WPF\Sources\Development\Controls\GridView\GridView\GridView\GridViewDataControl.Editing.cs:line 450at System.Windows.UIElement.IsFocused_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)at System.Windows.DependencyObject.ClearValueCommon(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata)at System.Windows.DependencyObject.ClearValue(DependencyPropertyKey key)at System.Windows.Input.FocusManager.OnFocusedElementChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)at System.Windows.Input.FocusManager.SetFocusedElement(DependencyObject element, IInputElement value)at System.Windows.Input.KeyboardNavigation.UpdateFocusedElement(DependencyObject focusTarget)at System.Windows.FrameworkElement.OnGotKeyboardFocus(Object sender, KeyboardFocusChangedEventArgs e)at System.Windows.Input.KeyboardFocusChangedEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)at System.Windows.Input.InputManager.ProcessStagingArea()at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)at System.Windows.Input.KeyboardDevice.ChangeFocus(DependencyObject focus, Int32 timestamp)at System.Windows.Input.KeyboardDevice.TryChangeFocus(DependencyObject newFocus, IKeyboardInputProvider keyboardInputProvider, Boolean askOld, Boolean askNew, Boolean forceToNullIfFailed)at System.Windows.Input.KeyboardDevice.Focus(DependencyObject focus, Boolean askOld, Boolean askNew, Boolean forceToNullIfFailed)at System.Windows.Input.KeyboardDevice.Focus(IInputElement element)at System.Windows.UIElement.Focus()at System.Windows.Controls.ScrollViewer.OnMouseLeftButtonDown(MouseButtonEventArgs e)at System.Windows.UIElement.OnMouseLeftButtonDownThunk(Object sender, MouseButtonEventArgs e)at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)at System.Windows.UIElement.OnMouseDownThunk(Object sender, MouseButtonEventArgs e)at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)at System.Windows.Input.InputManager.ProcessStagingArea()at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)