2013-12-17 2 views
3

Я знаю, что есть 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

удалить весь код и создать надлежащую ViewModel для этого. затем просто привяжите интерфейс пользователя (** через XAML **) и не используйте процедурный код. –

+0

Я знаю, что это правильный путь, но действительно ли? нет других вариантов? – Yaron

+0

Потому что это небольшая программа и не очень важна ... поэтому не оптимальное, но простое решение будет достаточно – Yaron

ответ

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() }; 
Смежные вопросы