动态生成列MVVM [英] Dynamic generate column mvvm
本文介绍了动态生成列MVVM的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我尽量让动态生成列的一个ListView。我使用MVVM百通。
我怎么能实现呢?
在这个momemt我只有静态列。
< ListView控件的ItemsSource ={结合ProblemProducts}
Grid.Row =1Grid.RowSpan =4的HorizontalAlignment =左VerticalAlignment =顶部Grid.Column =4>
< ListView.View>
<&GridView的GT;
< GridViewColumn标题=SpisującyDisplayMemberBinding ={结合_spisujacy}WIDTH =自动/>
< GridViewColumn标题=MiejsceskładowaniaDisplayMemberBinding ={结合MiejsceSkladowania}WIDTH =自动/>
< GridViewColumn标题=典型spisuDisplayMemberBinding ={结合_typSpisu}WIDTH =自动/>
< GridViewColumn标题=KODDisplayMemberBinding ={结合KOD}WIDTH =自动/>
< / GridView的>
< /ListView.View>
< /&的ListView GT;
解决方案
您可以创建 GridView控件
适当的动态列使用转换器。在这里工作的例子:
MainWindow.xaml
<窗口x:类=WpfApplication1.MainWindow
的xmlns =http://schemas.microsoft.com/winfx/2006/xaml/$p$psentation
的xmlns:X =http://schemas.microsoft.com/winfx/2006/xaml
的xmlns:WpfApplication1 =CLR的命名空间:WpfApplication1
MC:可忽略=D的xmlns:D =http://schemas.microsoft.com/ex$p$pssion/blend/2008
的xmlns:MC =http://schemas.openxmlformats.org/markup-compatibility/2006
D:DesignHeight =189D:DesignWidth =312WIDTH =300HEIGHT =300>
< Window.Resources>
< WpfApplication1:ConfigToDynamicGridViewConverter X:键=ConfigToDynamicGridViewConverter/>
< /Window.Resources>
< ListView控件的ItemsSource ={结合产品}中查看={结合ColumnConfig,转换器= {StaticResource的ConfigToDynamicGridViewConverter}}/>
< /窗GT;
MainWindow.xaml.cs
使用System.Collections.Generic;
使用System.Windows;命名空间WpfApplication1
{
///<总结>
///为MainWindow.xaml交互逻辑
///< /总结>
公共部分类主窗口:窗口
{
公共主窗口()
{
的InitializeComponent();
的DataContext =新视图模型();
}
} 公共类视图模型
{
公共ColumnConfig ColumnConfig {搞定;组; }
公共IEnumerable的<产品与GT;产品{搞定;组; } 公共视图模型()
{
产品=新的List<产品与GT; {新产品{名称=一些产品,属性=非常酷的产品},新产品{名称=其他产品,属性=不是很爽一}};
ColumnConfig =新ColumnConfig {列=新的List<列> {新列{标题=名称,数据字段=姓名},新列{标题=属性,数据字段=属性}}};
}
} 公共类ColumnConfig
{
公共IEnumerable的<列>列{搞定;组; }
} 公共类列
{
公共字符串头{搞定;组; }
公共字符串数据字段{搞定;组; }
} 公共类产品
{
公共字符串名称{;组; }
公共字符串属性{获得;组; }
}
}
ConfigToDynamicGridViewConverter.cs
使用系统;
使用System.Globalization;
使用System.Windows.Controls的;
使用System.Windows.Data;命名空间WpfApplication1
{
公共类ConfigToDynamicGridViewConverter:的IValueConverter
{
公共对象转换(对象的值,类型TARGETTYPE,对象参数,CultureInfo的文化)
{
无功配置=值ColumnConfig;
如果(配置!= NULL)
{
VAR grdiView =新的GridView();
的foreach(在config.Columns VAR列)
{
VAR约束力=新绑定(column.DataField);
grdiView.Columns.Add(新GridViewColumn {头= column.Header,DisplayMemberBinding =结合});
}
返回grdiView;
}
返回Binding.DoNothing;
} 公共对象ConvertBack(对象的值,类型TARGETTYPE,对象参数,CultureInfo的文化)
{
抛出新NotSupportedException异常();
}
}
}
I try to make a ListView with dynamic generation of column. I use mvvm patern. How i can implement this? In this momemt I have only 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
with appropriate columns dynamically using converter. Here is 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 for 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 so 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 as 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();
}
}
}
这篇关于动态生成列MVVM的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文