2013-12-17 46 views
3

我知道有100個關於它的問題,但是我沒有找到這個特定案例的答案。綁定一個包含數組變量的對象

我有一個對象,看起來像這樣:

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

,我想此對象綁定到數據網格(每個對象將是一個行和每一變量將是細胞)

我試圖結合這樣的:

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 []數組」。

我需要知道是否有一些選項來操作綁定後的數據。例如:

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

謝謝!

+1

刪除所有代碼,併爲此創造合適的視圖模型。然後通常綁定用戶界面(**通過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() }; 
相關問題