wpf - UniformGrid and ItemsSource -


i have uniformgrid. inside, put grid contains 2 children - , image , canvas. have list<grid> member contains grid definition.

i'm updating source of image null actual image, expecting image shown inside uniformgrid, nothing happens.

here's code:

xaml:

<border grid.row="0" >         <itemscontrol x:name="streamsitemscontrol" itemssource="{binding streams}">             <itemscontrol.itemspanel>                 <itemspaneltemplate>                     <uniformgrid x:name="streamsgrid"  cliptobounds="true" height="300" />                 </itemspaneltemplate>             </itemscontrol.itemspanel>         </itemscontrol>     </border> 

viewmodel:

private list<grid> m_streams = new list<grid>(); public list<grid> streams         {             { return m_streams; }             set             {                 m_streams = value;                 onpropertychanged("streams");             }         } 

edit: adding more code:

    public struct streamcontainer     {         public string streamname;         public grid streamgrid;         public canvas streamcanvas;         public image streamimage;     }     private readonly list<streamcontainer> m_streamscontainer = new list<streamcontainer>();      public sequencesplayerviewmodel()     {         registerstream("color");         registerstream("depth");         registerstream("ir");         registerstream("left");     }      private void registerstream(string streamname)     {         streamcontainer streamcontainer;          streamcontainer.streamname = streamname;         streamcontainer.streamcanvas = new canvas { name = streamname + "canvas", background = brushes.transparent, verticalalignment = verticalalignment.top };         streamcontainer.streamimage = new image { name = streamname + "image", stretch = stretch.uniform, verticalalignment = verticalalignment.top };          var widthbinding = new binding { path = new propertypath("actualwidth") };         var heightbinding = new binding         {             path = new propertypath("actualheight"),             source = streamcontainer.streamimage         };           streamcontainer.streamcanvas.setbinding(frameworkelement.heightproperty, heightbinding);         streamcontainer.streamcanvas.setbinding(frameworkelement.widthproperty, widthbinding);          streamcontainer.streamgrid = new grid { name = streamname + "grid" };         streamcontainer.streamgrid.children.add(streamcontainer.streamimage);         streamcontainer.streamgrid.children.add(streamcontainer.streamcanvas);          streamcontainer.streamgrid.visibility = visibility.collapsed;          m_streamscontainer.add(streamcontainer);     }      private void addstream(streamcontainer currentstream)     {         var listofstreams = getlistofstream();          if (listofstreams.count > 0)         {             var streamtoadd = listofstreams.find(currstream => currstream.name == currentstream.streamname);             if (streamtoadd != null)                 if (!string.isnullorempty(currentstream.streamname))                 {                     currentstream.streamgrid.visibility = visibility.visible;                     (currentstream.streamgrid.children[0] image).source = streamtoadd.imagebitmap;                 }         }          streams.add(currentstream.streamgrid);     }      private void onnewframeready(uint framenumber)     {         try         {             var listofstreams = getlistofstream();              foreach (var elem in streams)             {                 var currentcanvas = (elem.children[1] canvas);                 var canvasname = currentcanvas.name.split(new[] { "canvas" }, stringsplitoptions.removeemptyentries).first();                  var currentstream = listofstreams.find(currstream => currstream.name == canvasname);                 if (!string.isnullorempty(currentstream.name))                     (elem.children[0] image).source = currentstream.imagebitmap;                 panel p = currentcanvas;                 elem.updatelayout();                  elem.width = (elem.children[0] image).actualwidth;                 elem.height = (elem.children[0] image).actualheight;                 elem.updatelayout();             }         }         catch (exception ex)         {         }     } 

the viewmodel connected correctly, , bindings of other controls working properly.

i can see streams member updated correctly, meaning image correctly updated new source.

what missing?

perhaps issue items not showing @ -- not image isn't updating (because see you're updating source property of image element directly)... list, propertychanged event fire when list<> changed, not when added it, unlike observablecollection<> fires events when items added/removed/replaced/cleared.

try replacing list<> observablecollection<> (found in system.collections.objectmodel)

other that, grid , image instead defined in datatemplate within itemscontrol.itemtemplate , source bound property of stream viewmodel (which should have collection of) -- unrelated issue.


Comments

Popular posts from this blog

PHP DOM loadHTML() method unusual warning -

python - How to create jsonb index using GIN on SQLAlchemy? -

c# - TransactionScope not rolling back although no complete() is called -