Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用数组变量绑定对象_C#_Wpf_Data Binding_Binding_Datagrid - Fatal编程技术网

C# 用数组变量绑定对象

C# 用数组变量绑定对象,c#,wpf,data-binding,binding,datagrid,C#,Wpf,Data Binding,Binding,Datagrid,我知道有100个问题,但我还没有找到这个具体案例的答案 我有一个像这样的对象: public string LogMessage { get; set; } public DateTime Time { get; set; } public string[] Params { get; set; } Params.Binding = new Binding("Params") { Converter = new ArrayToStringConverter() }; 我想把这

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

我有一个像这样的对象:

public string LogMessage { get; set; }
public DateTime Time { get; set; }        
public string[] Params { get; set; }
Params.Binding = new Binding("Params") { Converter = new ArrayToStringConverter() };
我想把这个对象绑定到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();

谢谢

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

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();
    }
}
现在,您可以将转换器添加到绑定中,如下所示:

public string LogMessage { get; set; }
public DateTime Time { get; set; }        
public string[] Params { get; set; }
Params.Binding = new Binding("Params") { Converter = new ArrayToStringConverter() };

删除所有代码并为此创建适当的ViewModel。然后正常绑定UI(通过XAML),而不使用过程代码。我知道这是正确的方法,但真的吗?没有其他选择?因为这是一个小项目,并不重要。。因此,在ListView GridView中,可以将数组绑定到组合框或列表,这不是最佳但简单的解决方案。或者创建一个属性,该属性仅将数组作为单个串联文本返回。