用数组变量绑定一个对象

时间:2013-12-17 15:45:59

标签: c# wpf data-binding binding datagrid

我知道有100个问题,但我没有找到这个具体案例的答案。

我有一个看起来像这样的对象:

public string LogMessage { get; set; }
public DateTime Time { get; set; }        
public string[] Params { get; set; }

我希望将此对象绑定到datagrid(每个对象都是一行,每个变量都是单元格)

我试图像这样绑定:

DataGridTextColumn Log = new DataGridTextColumn();
DataGridTextColumn Time = new DataGridTextColumn();
DataGridTextColumn Params = new DataGridTextColumn();
win.Table.Columns.Add(Time);
win.Table.Columns.Add(Log);
win.Table.Columns.Add(Params);
Time.Binding = new Binding("Time");
Log.Binding = new Binding("LogMessage");
Params.Binding = new Binding("Params");

Params列的结果当然是:“String [] Array”。

我需要知道在绑定后是否有一些操作数据的选项。类似的东西:

new Binding("Params").ToJson();

谢谢!

1 个答案:

答案 0 :(得分:2)

可能有几种方法可以做到这一点。如果您能够更改类,那么您只需添加一个新属性并绑定到该类:

public string[] ParamsString
{ 
    get { return string.Join(", ", Params); }
}

或者,如果您无法更改类,则可以创建一个IValueConverter,将数组转换为您想要的值。例如:

public class ArrayToStringConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string[] input = value as string[];
        if (input != null && input.Length > 0)
            return string.Join(", ", input);
        return "";
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

现在您可以将转换器添加到绑定中,如下所示:

Params.Binding = new Binding("Params") { Converter = new ArrayToStringConverter() };