上一篇中,我们写了一个生成复杂属性列表的方法:http://blog.csdn.net/d100000/article/details/49756229
【注:用的是.net 4.0版本,wpf】
在这一篇中,我们将建立一个可视化的匹配工具。
首先把布局说一下
布局比较简陋,一共有三个listbox,一个是是数据来源类型的list,一个是数据匹配目标的list,还有一个是匹配结果的list
为了操作方便,我构建了一个子自定义的数据类型,用于保存匹配完成的数据。
自定义的CustomData类:
using System.Linq;
namespace KDY.Common.ModelMapper.libs
{
/// <summary>
/// 自定义结构体类型
/// classname[] 第一个保存的是来源类名,第二个保存的是目标类名
/// dataString[] 第一个是来源属性名,第二个是目标属性名
/// </summary>
public class CustomData
{
private string[] _className;
/// <summary>
/// 转换属性所属类名
/// </summary>
public string[] ClassName
{
get { return _className; }
set { _className = value; }
}
private string[] _dataStrings;
/// <summary>
/// 转换属性名
/// </summary>
public string[] DataStrings
{
get { return _dataStrings; }
set { _dataStrings = value; }
}
/// <summary>
/// 显示转换规则
/// </summary>
public string ShowString
{
get { return _dataStrings.Count() != 2 ? null : _dataStrings[0] + "->" + _dataStrings[1]; }
}
}
}
保存了转换属性的类名,属性名,以及属性匹配的可视化结果。
可视化结果就是一二string;即如果如图:【下图测试数据来源和目标相同】
布局文件,由于新手,也不想改了,所以没有按照规范设置分区,直接都是拖控件的。
<Window x:Class="KDY.Common.ModelMapper.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="502.8" Width="741"
ResizeMode="NoResize" WindowStartupLocation="CenterScreen">
<Grid>
<Label Content=" 匹配名称:" HorizontalAlignment="Left" Margin="491,9,0,0" VerticalAlignment="Top" Width="170" Foreground="#FF7A7A7A"/>
<Label Content=" 数据来源" HorizontalAlignment="Left" Margin="10,38,0,0" VerticalAlignment="Top" Width="170" Foreground="#FF7A7A7A"/>
<Label Content="赋值目标" HorizontalAlignment="Left" Margin="199,38,0,0" VerticalAlignment="Top" Width="170" Foreground="#FF7A7A7A"/>
<Label Content="匹配规则" HorizontalAlignment="Left" Margin="495,38,0,0" VerticalAlignment="Top" Width="170" Foreground="#FF7A7A7A"/>
<ListBox x:Name="LbFromTypeList" HorizontalAlignment="Left" Height="400" Margin="10,64,0,0" VerticalAlignment="Top" Width="170"/>
<ComboBox x:Name="CbSelectFrom" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="170" Height="26" SelectionChanged="CbFromChange"/>
<ListBox x:Name="LbToTypeListTo" HorizontalAlignment="Left" Height="400" Margin="199,64,0,0" VerticalAlignment="Top" Width="170" />
<Button Content=">>>>" HorizontalAlignment="Left" Margin="398,163,0,0" VerticalAlignment="Top" Width="75" Click="BtnAdd_Click"/>
<ListBox x:Name="LbSouceList" HorizontalAlignment="Left" Height="400" Margin="495,64,0,0" VerticalAlignment="Top" Width="229" />
<Label x:Name="LabFromCount" Content="" HorizontalAlignment="Left" Margin="80,38,0,0" VerticalAlignment="Top"/>
<Label x:Name="LabToCount" Content="" HorizontalAlignment="Left" Margin="262,38,0,0" VerticalAlignment="Top"/>
<Label x:Name="LabSouceCount" Content="" HorizontalAlignment="Left" Margin="561,38,0,0" VerticalAlignment="Top"/>
<Button Content="Delete" HorizontalAlignment="Left" Margin="398,212,0,0" VerticalAlignment="Top" Width="75" Click="BtnDelete_Click"/>
<ComboBox x:Name="CbSelectTo" HorizontalAlignment="Left" Margin="199,10,0,0" VerticalAlignment="Top" Width="170" Height="26" SelectionChanged="CbToChange"/>
<Button Content="生成匹配文件" HorizontalAlignment="Left" Margin="398,10,0,0" VerticalAlignment="Top" Width="89" Height="26" Click="BtnCreate_Click"/>
<TextBox x:Name="TextBoxName" HorizontalAlignment="Left" Height="23" Margin="561,10,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="163"/>
<