c# - Add value to collection of type 'System.Windows.Controls.ItemCollection' threw an exception -


i'm having problem wpf application, , have no idea why. i'm far expert xaml, , don't understand error, or part of code throwing error.

i have following view:

<datagrid borderthickness="0" width="auto" autogeneratecolumns="false" alternationcount="2"           issynchronizedwithcurrentitem="true" automationproperties.automationid="positionsummarygrid"            itemssource="{binding path=boelist}" rowdetailsvisibilitymode="visiblewhenselected">     <datagrid.columns>         <datagridtextcolumn header="boe reference" binding="{binding path=reference}"/>         <datagridtextcolumn header="account no" binding="{binding path=accountno}"/>         <datagridtextcolumn header="lbl invoice no" binding="{binding path=invoiceno}"/>         <datagridtextcolumn header="date raised" binding="{binding path=dateraised}"/>         <datagridtextcolumn header="value" binding="{binding converter={staticresource currencyconverter}, path=value}" width="85"/>         <datagridtextcolumn header="bank charges" binding="{binding converter={staticresource currencyconverter}, path=bankcharges}" width="85"/>         <datagridtextcolumn header="payment due" binding="{binding converter={staticresource currencyconverter}, path=paymentdue}" width="85"/>         <datagridtextcolumn header="description" binding="{binding path=description}" width="auto"/>     </datagrid.columns>     <datagrid.rowdetailstemplate>         <datatemplate>             <datagrid autogeneratecolumns="false" itemssource="{binding payments}">                 <datagridtextcolumn header="payment date" binding="{binding paymentdate}"/>                 <datagridtextcolumn header="payment amount" binding="{binding converter={staticresource currencyconverter}, path=paymentamount}"/>             </datagrid>         </datatemplate>     </datagrid.rowdetailstemplate> </datagrid> 

which styled using following:

<style x:key="datagridscrollviewer" targettype="{x:type scrollviewer}">     <setter property="template">         <setter.value>             <controltemplate targettype="{x:type scrollviewer}">                 <grid background="{templatebinding background}">                     <grid.columndefinitions>                         <columndefinition width="*"/>                         <columndefinition width="auto"/>                     </grid.columndefinitions>                     <grid.rowdefinitions>                         <rowdefinition height="*"/>                         <rowdefinition height="auto"/>                     </grid.rowdefinitions>                      <dockpanel margin="{templatebinding padding}">                         <scrollviewer dockpanel.dock="top"                                       horizontalscrollbarvisibility="hidden"                                       verticalscrollbarvisibility="hidden"                                       focusable="false">                             <border cornerradius="4" background="{staticresource defaultedborderbrush}" padding="4" margin="0,4,0,4">                                 <datagridcolumnheaderspresenter x:name="part_columnheaderspresenter"/>                             </border>                         </scrollviewer>                          <scrollcontentpresenter name="part_scrollcontentpresenter" keyboardnavigation.directionalnavigation="local"/>                     </dockpanel>                      <scrollbar name="part_horizontalscrollbar"                         orientation="horizontal"                         grid.row="1"                         maximum="{templatebinding scrollablewidth}"                         viewportsize="{templatebinding viewportwidth}"                         value="{templatebinding horizontaloffset}"                         visibility="{templatebinding computedhorizontalscrollbarvisibility}"/>                      <scrollbar name="part_verticalscrollbar"                         grid.column="1"                         maximum="{templatebinding scrollableheight}"                         viewportsize="{templatebinding viewportheight}"                         value="{templatebinding verticaloffset}"                         visibility="{templatebinding computedverticalscrollbarvisibility}"/>                 </grid>             </controltemplate>         </setter.value>     </setter> </style>  <style x:key="datagridcolumnheadergripper" targettype="{x:type thumb}">     <setter property="width" value="18"/>     <setter property="background" value="#404040"/>     <setter property="template">         <setter.value>             <controltemplate targettype="{x:type thumb}">                 <border padding="{templatebinding padding}" background="transparent">                     <rectangle horizontalalignment="center" width="1" fill="{templatebinding background}"/>                 </border>             </controltemplate>         </setter.value>     </setter> </style>  <style x:key="{x:type datagridcolumnheader}" targettype="{x:type datagridcolumnheader}">     <setter property="horizontalcontentalignment" value="center"/>     <setter property="verticalcontentalignment" value="center"/>     <setter property="foreground" value="#ffffff"/>     <setter property="template">         <setter.value>             <controltemplate targettype="{x:type datagridcolumnheader}">                 <grid>                     <border name="headerborder" borderthickness="0,1,0,1" borderbrush="{x:null}" background="{x:null}" padding="2,0,2,0">                         <contentpresenter name="headercontent" margin="0,0,0,1" verticalalignment="{templatebinding verticalcontentalignment}" horizontalalignment="{templatebinding horizontalcontentalignment}" recognizesaccesskey="true" snapstodevicepixels="{templatebinding snapstodevicepixels}"/>                     </border>                     <thumb x:name="part_headergripper" horizontalalignment="right" margin="0,0,-9,0" style="{staticresource datagridcolumnheadergripper}" foreground="#ffffffff" background="{x:null}"/>                 </grid>                 <controltemplate.triggers>                     <trigger property="ismouseover" value="true">                         <setter property="background" targetname="part_headergripper" value="{x:null}"/>                         <setter property="foreground" targetname="part_headergripper" value="#fffcfcfc"/>                         <setter property="background" targetname="headerborder" value="{x:null}"/>                     </trigger>                     <trigger property="ispressed" value="true">                         <setter targetname="headercontent" property="margin" value="1,1,0,0"/>                         <setter property="foreground" targetname="part_headergripper" value="#ffe0e0e0"/>                         <setter property="background" targetname="part_headergripper" value="{x:null}"/>                         <setter property="background" targetname="headerborder" value="{x:null}"/>                     </trigger>                     <trigger property="isenabled" value="false">                         <setter property="foreground" value="{dynamicresource {x:static systemcolors.graytextbrushkey}}"/>                         <setter property="background" targetname="part_headergripper" value="{x:null}"/>                     </trigger>                 </controltemplate.triggers>             </controltemplate>         </setter.value>     </setter> </style>  <style x:key="{x:type datagrid}" targettype="{x:type datagrid}">     <setter property="snapstodevicepixels" value="true"/>     <setter property="overridesdefaultstyle" value="true"/>     <setter property="scrollviewer.horizontalscrollbarvisibility" value="auto"/>     <setter property="scrollviewer.verticalscrollbarvisibility" value="auto"/>     <setter property="scrollviewer.cancontentscroll" value="true"/>     <setter property="verticalcontentalignment" value="center"/>     <setter property="gridlinesvisibility" value="none"/>     <setter property="selectionmode" value="extended"/>     <setter property="template">         <setter.value>             <controltemplate targettype="{x:type datagrid}">                 <border name="border" borderthickness="1" borderbrush="{x:null}" background="{x:null}">                     <scrollviewer style="{dynamicresource datagridscrollviewer}" foreground="#ffffffff">                         <itemspresenter snapstodevicepixels="{templatebinding snapstodevicepixels}"/>                     </scrollviewer>                 </border>                 <controltemplate.triggers>                     <trigger property="isgrouping" value="true">                         <setter property="scrollviewer.cancontentscroll" value="false"/>                     </trigger>                     <trigger property="isenabled" value="false">                         <setter targetname="border" property="background" value="#aaaaaa"/>                     </trigger>                 </controltemplate.triggers>             </controltemplate>         </setter.value>     </setter> </style>  <style x:key="{x:type datagridrow}" targettype="{x:type datagridrow}">     <setter property="snapstodevicepixels" value="true"/>     <setter property="overridesdefaultstyle" value="true"/>     <setter property="horizontalcontentalignment" value="center" />     <setter property="verticalcontentalignment" value="center" />     <setter property="foreground" value="#000000"/>     <setter property="detailsvisibility" value="collapsed"/>     <setter property="template">         <setter.value>             <controltemplate targettype="{x:type datagridrow}">                 <border name="border" padding="2" snapstodevicepixels="true" cornerradius="4" margin="0,4,0,0">                     <selectivescrollinggrid>                         <grid.columndefinitions>                             <columndefinition width="auto"/>                             <columndefinition width="*"/>                         </grid.columndefinitions>                          <grid.rowdefinitions>                             <rowdefinition height="*"/>                             <rowdefinition height="auto"/>                         </grid.rowdefinitions>                          <datagridcellspresenter grid.column="1"                                          itemspanel="{templatebinding itemspanel}"                                          snapstodevicepixels="{templatebinding snapstodevicepixels}"/>                          <datagriddetailspresenter  selectivescrollinggrid.selectivescrollingorientation="{binding relativesource={relativesource ancestortype={x:type datagrid}}, path=arerowdetailsfrozen, converter={x:static datagrid.rowdetailsscrollingconverter}, converterparameter={x:static selectivescrollingorientation.vertical}}"                                             grid.column="1" grid.row="1"                                             visibility="{templatebinding detailsvisibility}" />                          <datagridrowheader selectivescrollinggrid.selectivescrollingorientation="vertical"  grid.rowspan="2"                                     visibility="{binding relativesource={relativesource ancestortype={x:type datagrid}}, path=headersvisibility, converter={x:static datagrid.headersvisibilityconverter}, converterparameter={x:static datagridheadersvisibility.row}}"/>                     </selectivescrollinggrid>                 </border>                 <controltemplate.triggers>                     <trigger property="itemscontrol.alternationindex" value="0">                         <setter property="background" targetname="border"  value="#a5ffffff"></setter>                     </trigger>                     <trigger property="itemscontrol.alternationindex" value="1">                         <setter property="background" targetname="border"  value="#01ffffff"></setter>                     </trigger>                     <trigger property="isselected" value="true">                         <setter property="background" targetname="border" value="#99b4c6"/>                         <setter property="foreground" value="#000000"/>                     </trigger>                     <trigger property="ismouseover" value="true">                         <setter property="background" targetname="border" value="#c5d7e5"/>                         <setter property="foreground" value="#000000"/>                     </trigger>                     <trigger property="isenabled" value="false">                         <setter property="foreground" value="#000000"/>                     </trigger>                 </controltemplate.triggers>             </controltemplate>         </setter.value>     </setter>               </style>  <style x:key="{x:type datagridcell}" targettype="{x:type datagridcell}">     <setter property="template">         <setter.value>             <controltemplate targettype="{x:type datagridcell}">                 <grid>                     <rectangle fill="white" opacity="0"></rectangle>                     <contentpresenter horizontalalignment="center"/>                  </grid>             </controltemplate>         </setter.value>     </setter> </style> 

the viewmodel is:

public class boelistviewmodel : screen {     #region fields     private boemanager _manager;     private observablecollection<boe> _boelist;     #endregion      #region properties     public observablecollection<boe> boelist     {         { return _boelist; }         set         {             _boelist = value;             notifyofpropertychange(() => boelist);         }     }      public string header     {         { return "current boes"; }     }     #endregion      #region constructor     public boelistviewmodel()     {         this.displayname = "current boes";         _manager = ioc.get<boemanager>();         boelist = _manager.load();     }     #endregion 

the boe model simple collection of properties including:

public observablecollection<payment> payments {     { return _payments; }     set     {         if (value != _payments)         {             _payments = value;             notifyofpropertychange(() => payments);         }     } } 

with payment again simple collection of properties (this prototyping).

exception appears happen inside caliburn micro's onstartup() method, i'm not 100% sure that. , is:

  system.windows.markup.xamlparseexception occurred   hresult=-2146233087   message=add value collection of type 'system.windows.controls.itemcollection' threw exception.   source=presentationframework   linenumber=0   lineposition=0   stacktrace:        @ system.windows.frameworktemplate.loadtemplatexaml(xamlreader templatereader, xamlobjectwriter currentwriter)        @ system.windows.frameworktemplate.loadtemplatexaml(xamlobjectwriter objectwriter)        @ system.windows.frameworktemplate.loadoptimizedtemplatecontent(dependencyobject container, icomponentconnector componentconnector, istyleconnector styleconnector, list`1 affectedchildren, uncommonfield`1 templatednonfechildrenfield)        @ system.windows.frameworktemplate.loadcontent(dependencyobject container, list`1 affectedchildren)        @ system.windows.stylehelper.applytemplatecontent(uncommonfield`1 datafield, dependencyobject container, frameworkelementfactory templateroot, int32 lastchildindex, hybriddictionary childindexfromchildid, frameworktemplate frameworktemplate)        @ system.windows.frameworktemplate.applytemplatecontent(uncommonfield`1 templatedatafield, frameworkelement container)        @ system.windows.frameworkelement.applytemplate()        @ system.windows.frameworkelement.measurecore(size availablesize)        @ system.windows.uielement.measure(size availablesize)        @ system.windows.controls.grid.measurecell(int32 cell, boolean forceinfinityv)        @ system.windows.controls.grid.measurecellsgroup(int32 cellshead, size referencesize, boolean ignoredesiredsizeu, boolean forceinfinityv, boolean& hasdesiredsizeuchanged)        @ system.windows.controls.grid.measureoverride(size constraint)        @ system.windows.frameworkelement.measurecore(size availablesize)        @ system.windows.uielement.measure(size availablesize)        @ system.windows.contextlayoutmanager.updatelayout()        @ system.windows.uielement.updatelayout()        @ system.windows.interop.hwndsource.setlayoutsize()        @ system.windows.interop.hwndsource.set_rootvisualinternal(visual value)        @ system.windows.interop.hwndsource.set_rootvisual(visual value)        @ system.windows.window.setrootvisual()        @ system.windows.window.setrootvisualandupdatestc()        @ system.windows.window.setupinitialstate(double requestedtop, double requestedleft, double requestedwidth, double requestedheight)        @ system.windows.window.createsourcewindow(boolean duringshow)        @ system.windows.window.createsourcewindowduringshow()        @ system.windows.window.safecreatewindowduringshow()        @ system.windows.window.showhelper(object booleanbox)        @ system.windows.window.show()        @ caliburn.micro.windowmanager.showwindow(object rootmodel, object context, idictionary`2 settings) in c:\users\rob\documents\codeplex\caliburnmicro\src\caliburn.micro.wpf\windowmanager.cs:line 75   innerexception: system.invalidoperationexception        hresult=-2146233079        message=operation not valid while itemssource in use. access , modify elements itemscontrol.itemssource instead.        source=presentationframework        stacktrace:             @ system.windows.controls.itemcollection.checkisusinginnerview()             @ system.windows.controls.itemcollection.add(object newitem)             @ system.xaml.schema.xamltypeinvoker.addtocollection(object instance, object item)             @ ms.internal.xaml.runtime.clrobjectruntime.add(object collection, xamltype collectiontype, object value, xamltype valuexamltype)        innerexception:  

sorry code dump, have no real clue part of code causing error, throws error without location, i'm has rowdetails, without rowdetails works without issue, cannot life of me work out going on.

also, if let me know how track down these kind of error?

edit:

two things.

removing line rowdetailsvisibilitymode="visiblewhenselected" allows application run without exception, details row never shown.

secondly, commenting out datagriddetailspresenter inside datagrid row style has same effect of allowing run, must that, code taken straight microsoft examples.

your problem not define columns in proper way.

add datagrid.columns tag

<datagrid.rowdetailstemplate>     <datatemplate>         <datagrid autogeneratecolumns="false" itemssource="{binding payments}">             <datagrid.columns>                  <datagridtextcolumn header="payment date" binding="{binding paymentdate}"/>                 <datagridtextcolumn header="payment amount" binding="{binding converter={staticresource currencyconverter}, path=paymentamount}"/>             </datagrid.columns>          </datagrid>     </datatemplate> </datagrid.rowdetailstemplate> 

Comments

Popular posts from this blog

resizing Telegram inline keyboard -

command line - How can a Python program background itself? -

php - "cURL error 28: Resolving timed out" on Wordpress on Azure App Service on Linux -