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:
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
Post a Comment