C# 用数组变量绑定对象
我知道有100个问题,但我还没有找到这个具体案例的答案 我有一个像这样的对象: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() }; 我想把这
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中,可以将数组绑定到组合框或列表,这不是最佳但简单的解决方案。或者创建一个属性,该属性仅将数组作为单个串联文本返回。