Crash when binding InformationLayer to a string collection

2 posts, 0 answers
  1. Frederic
    Frederic avatar
    4 posts
    Member since:
    Jun 2010

    Posted 09 Jul 2010 Link to this post

    Say I have a DataContext with:
    ObservableCollection<Toto> m_files = new ObservableCollection<Toto>();
    public ObservableCollection<Toto> Filenames
    {
        get
        {
            return m_files;
        }
    }

    For some reason, this code:
    <map:InformationLayer ItemsSource="{Binding Filenames}">
        <map:InformationLayer.ItemTemplate>
            <DataTemplate>
                <Canvas map:MapLayer.Location="5, 5" Width="100" Height="100" Background="AliceBlue">
                    <TextBlock Text="{Binding}"/>
                </Canvas>
            </DataTemplate>
        </map:InformationLayer.ItemTemplate>
    </map:InformationLayer>

    crashes with this exception:
    System.FormatException was unhandled
      Message=Input string was not in a correct format.
      Source=Telerik.Windows.Controls.DataVisualization
      StackTrace:
           at Telerik.Windows.Controls.Map.Location.Parse(String source) in c:\Builds\WPF_Scrum\Release_WPF_2010_Q1_SP2\Sources\Development\Controls\DataVisualization\Map\Location.cs:line 200
           at Telerik.Windows.Controls.Map.LocationConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value) in c:\Builds\WPF_Scrum\Release_WPF_2010_Q1_SP2\Sources\Development\Controls\DataVisualization\Map\LocationConverter.cs:line 40
           at System.ComponentModel.TypeConverter.ConvertFrom(Object value)
           at Telerik.Windows.Controls.Map.InformationLayer.GetLocationFromItem(Object item) in c:\Builds\WPF_Scrum\Release_WPF_2010_Q1_SP2\Sources\Development\Controls\DataVisualization\Map\Layers\InformationLayer.cs:line 1214
           at Telerik.Windows.Controls.Map.InformationLayer.PrepareContainerForItemOverride(DependencyObject element, Object item) in c:\Builds\WPF_Scrum\Release_WPF_2010_Q1_SP2\Sources\Development\Controls\DataVisualization\Map\Layers\InformationLayer.cs:line 449
           at System.Windows.Controls.ItemsControl.MS.Internal.Controls.IGeneratorHost.PrepareItemContainer(DependencyObject container, Object item)
           at System.Windows.Controls.ItemContainerGenerator.System.Windows.Controls.Primitives.IItemContainerGenerator.PrepareItemContainer(DependencyObject container)
           at System.Windows.Controls.Panel.reGenerateChildren()
           at System.Windows.Controls.Panel.OnItemsChangedInternal(Object sender, ItemsChangedEventArgs args)
           at System.Windows.Controls.Panel.OnItemsChanged(Object sender, ItemsChangedEventArgs args)
           at System.Windows.Controls.ItemContainerGenerator.OnRefresh()
           at System.Windows.Controls.ItemContainerGenerator.OnCollectionChanged(Object sender, NotifyCollectionChangedEventArgs args)
           at System.Windows.Controls.ItemContainerGenerator.System.Windows.IWeakEventListener.ReceiveWeakEvent(Type managerType, Object sender, EventArgs e)
           at System.Windows.WeakEventManager.DeliverEventToList(Object sender, EventArgs args, ListenerList list)
           at System.Windows.WeakEventManager.DeliverEvent(Object sender, EventArgs args)
           at System.Collections.Specialized.CollectionChangedEventManager.OnCollectionChanged(Object sender, NotifyCollectionChangedEventArgs args)
           at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)
           at System.Windows.Data.CollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
           at System.Windows.Controls.ItemCollection.System.Windows.IWeakEventListener.ReceiveWeakEvent(Type managerType, Object sender, EventArgs e)
           at System.Windows.WeakEventManager.DeliverEventToList(Object sender, EventArgs args, ListenerList list)
           at System.Windows.WeakEventManager.DeliverEvent(Object sender, EventArgs args)
           at System.Collections.Specialized.CollectionChangedEventManager.OnCollectionChanged(Object sender, NotifyCollectionChangedEventArgs args)
           at System.Windows.Data.CollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
           at System.Windows.Data.ListCollectionView.RefreshOverride()
           at System.Windows.Data.CollectionView.RefreshInternal()
           at System.Windows.Data.CollectionView.Refresh()
           at System.Windows.Data.CollectionView.EndDefer()
           at System.Windows.Data.CollectionView.DeferHelper.Dispose()
           at System.Windows.Controls.ItemCollection.SetCollectionView(CollectionView view)
           at System.Windows.Controls.ItemCollection.SetItemsSource(IEnumerable value)
           at System.Windows.Controls.ItemsControl.OnItemsSourceChanged(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, OperationType operationType)
           at System.Windows.DependencyObject.InvalidateProperty(DependencyProperty dp)
           at System.Windows.Data.BindingExpression.Invalidate(Boolean isASubPropertyChange)
           at System.Windows.Data.BindingExpression.TransferValue(Object newValue, Boolean isASubPropertyChange)
           at System.Windows.Data.BindingExpression.Activate(Object item)
           at System.Windows.Data.BindingExpression.AttachToContext(AttachAttempt attempt)
           at System.Windows.Data.BindingExpression.MS.Internal.Data.IDataBindEngineClient.AttachToContext(Boolean lastChance)
           at MS.Internal.Data.DataBindEngine.Task.Run(Boolean lastChance)
           at MS.Internal.Data.DataBindEngine.Run(Object arg)
           at MS.Internal.Data.DataBindEngine.OnLayoutUpdated(Object sender, EventArgs e)
           at System.Windows.ContextLayoutManager.fireLayoutUpdateEvent()
           at System.Windows.ContextLayoutManager.UpdateLayout()
           at System.Windows.UIElement.UpdateLayout()
           at System.Windows.Interop.HwndSource.SetLayoutSize()
           at System.Windows.Interop.HwndSource.set_RootVisualInternal(Visual value)
           at System.Windows.Interop.HwndSource.set_RootVisual(Visual value)
           at System.Windows.Window.SetRootVisual()
           at System.Windows.Window.SetupInitialState(Double requestedTop, Double requestedLeft, Double requestedWidth, Double requestedHeight)
           at System.Windows.Window.CreateSourceWindowImpl()
           at System.Windows.Window.SafeCreateWindow()
           at System.Windows.Window.ShowHelper(Object booleanBox)
           at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
           at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
           at System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
           at System.Windows.Threading.DispatcherOperation.InvokeImpl()
           at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
           at System.Threading.ExecutionContext.runTryCode(Object userData)
           at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
           at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
           at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           at System.Windows.Threading.DispatcherOperation.Invoke()
           at System.Windows.Threading.Dispatcher.ProcessQueue()
           at System.Windows.Threading.Dispatcher.WndProcHook(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, Boolean isSingleParameter)
           at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
           at System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
           at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Boolean isSingleParameter)
           at System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
           at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
           at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
           at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
           at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
           at System.Windows.Threading.Dispatcher.Run()
           at System.Windows.Application.RunDispatcher(Object ignore)
           at System.Windows.Application.RunInternal(Window window)
           at System.Windows.Application.Run(Window window)
           at System.Windows.Application.Run()
           at WpfApplication1.App.Main() in C:\Users\frederic.souchu\documents\visual studio 2010\Projects\WpfMap\WpfApplication1\obj\x86\Release\App.g.cs:line 0
           at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
           at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
           at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
           at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           at System.Threading.ThreadHelper.ThreadStart()
      InnerException: System.FormatException
           Message=Input string was not in a correct format.
           Source=Telerik.Windows.Controls.DataVisualization
           StackTrace:
                at Telerik.Windows.Controls.Map.Location.Parse(String source) in c:\Builds\WPF_Scrum\Release_WPF_2010_Q1_SP2\Sources\Development\Controls\DataVisualization\Map\Location.cs:line 185
           InnerException:



    Note that replacing the <string> element by any sort of class just works fine!
    Regards
    Frederic

  2. Andrey
    Admin
    Andrey avatar
    1681 posts

    Posted 12 Jul 2010 Link to this post

    Hi Frederic,

    It works as designed. When InformationLayer is bound to a string collection it is supposed that this is a collection of the string representation of the Location objects. It tries to parse strings as Location and throws an exception when string has wrong format. You can't bind InformationLayer to the arbitrary string collection.

    All the best,
    Andrey Murzov
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  3. UI for WPF is Visual Studio 2017 Ready
Back to Top