动态生成列 mvvm [英] Dynamic generate column mvvm
本文介绍了动态生成列 mvvm的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我尝试使用动态生成列来制作 ListView.我使用 mvvm 模式.我该如何实现?在这一刻我只有静态列.
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>
推荐答案
您可以使用转换器动态创建具有适当列的 GridView
.这是工作示例:
You can create GridView
with appropriate columns dynamically using converter. Here is working example:
主窗口.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
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
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 gridView = new GridView();
foreach (var column in config.Columns)
{
var binding = new Binding(column.DataField);
gridView.Columns.Add(new GridViewColumn {Header = column.Header, DisplayMemberBinding = binding});
}
return gridView;
}
return Binding.DoNothing;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
}
这篇关于动态生成列 mvvm的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文