c# - Dynamic generate column mvvm -


i try make listview dynamic generation of column. use mvvm patern. how can implement this? in momemt have static columns.

<listview itemssource="{binding problemproducts}"                   grid.row="1" grid.rowspan="4" horizontalalignment="left" verticalalignment="top" grid.column="4">             <listview.view>                 <gridview>                     <gridviewcolumn header="spisujący" displaymemberbinding="{binding _spisujacy}" width="auto"/>                     <gridviewcolumn header="miejsce składowania" displaymemberbinding="{binding miejsceskladowania}" width="auto"/>                     <gridviewcolumn header="typ spisu" displaymemberbinding="{binding _typspisu}" width="auto"/>                     <gridviewcolumn header="kod" displaymemberbinding="{binding kod}" width="auto"/>                 </gridview>             </listview.view>         </listview> 

you can create gridview appropriate columns dynamically using converter. here working example:

app screen shot

mainwindow.xaml

<window x:class="wpfapplication1.mainwindow"         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"          xmlns:wpfapplication1="clr-namespace:wpfapplication1"          mc:ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"          d:designheight="189" d:designwidth="312" width="300" height="300">     <window.resources>         <wpfapplication1:configtodynamicgridviewconverter x:key="configtodynamicgridviewconverter" />     </window.resources>     <listview itemssource="{binding products}" view="{binding columnconfig, converter={staticresource configtodynamicgridviewconverter}}"/>     </window> 

mainwindow.xaml.cs

using system.collections.generic; using system.windows;  namespace wpfapplication1 {     /// <summary>     /// interaction logic mainwindow.xaml     /// </summary>     public partial class mainwindow : window     {         public mainwindow()         {             initializecomponent();             datacontext = new viewmodel();         }     }      public class viewmodel     {         public columnconfig columnconfig { get; set; }         public ienumerable<product> products { get; set; }          public viewmodel()         {             products = new list<product> { new product { name = "some product", attributes = "very cool product" }, new product { name = "other product", attributes = "not cool one" } };             columnconfig = new columnconfig { columns = new list<column> { new column { header = "name", datafield = "name" }, new column { header = "attributes", datafield = "attributes" } } };         }     }      public class columnconfig     {         public ienumerable<column> columns { get; set; }     }      public class column     {         public string header { get; set; }         public string datafield { get; set; }     }      public class product     {         public string name { get; set; }         public string attributes { get; set; }     } } 

configtodynamicgridviewconverter.cs

using system; using system.globalization; using system.windows.controls; using system.windows.data;  namespace wpfapplication1 {     public class configtodynamicgridviewconverter : ivalueconverter     {         public object convert(object value, type targettype, object parameter, cultureinfo culture)         {             var config = value columnconfig;             if (config != null)             {                 var grdiview = new gridview();                 foreach (var column in config.columns)                 {                     var binding = new binding(column.datafield);                     grdiview.columns.add(new gridviewcolumn {header = column.header, displaymemberbinding = binding});                 }                 return grdiview;             }             return binding.donothing;         }          public object convertback(object value, type targettype, object parameter, cultureinfo culture)         {             throw new notsupportedexception();         }     } } 

Comments

Popular posts from this blog

c# - SVN Error : "svnadmin: E205000: Too many arguments" -

c# - Copy ObservableCollection to another ObservableCollection -

All overlapping substrings matching a java regex -