2017-01-09 76 views
0

我使用預測創建天氣應用程序。我創建了ListViewTextCell作爲條目。 我想裏面電池測試格式化爲XXX YY其中:Xamarin表單ListView數據與兩個對象的綁定

  • XXX是價值
  • YY是單元

我已經觀察到的集合在ContentPage聲明,這是我ItemSource,我有另一個重要的財產,weatherUnit

private ObservableCollection<ForecastData> forecast = new ObservableCollection<ForecastData>(); 
private Unit weatherUnit { get; set; } 

我創建在構造函數中的數據模板和設置的一切行動:

public WeatherFormsAppPage() 
{ 
    InitializeComponent(); 
    var forecastWeatherDataTemplate = new DataTemplate(typeof(TextCell)); 
    forecastWeatherDataTemplate.SetBinding(TextCell.TextProperty, "mainData.Temperature"); 
    forecastWeatherDataTemplate.SetBinding(TextCell.DetailProperty, "date"); 
    ForecastView.ItemsSource = forecast; 
    ForecastView.ItemTemplate = forecastWeatherDataTemplate; 
} 

我如何添加到TextCell.TextProperty綁定格式是溫度和weatherUnit。溫度是雙倍,天氣單位有返回字符串的擴展名。現在,只有溫度值正常顯示及日期細節:

Current state

回答

1

您可以創建concats的價值觀爲你一個只讀屬性,然後綁定到

public string WeatherData 
{ 
    get 
    { 
     return $"{Temperature} {Unit}"; 
    } 
} 

結合

forecastWeatherDataTemplate.SetBinding(TextCell.TextProperty, "mainData.WeatherData "); 
+0

好的,但我使用Newtonsoft.Json庫得到這個預測數據形式JSON。所以我會「添加」單元到類,這不是序列化的一部分,而不是漂亮。我習慣於iOS cellForRowAtIndexPath方法,我可以在代碼中格式化和設置所有內容。 – Preetygeek

0

我也喜歡David的方法。在JSON類中擁有隻讀屬性是無需擔心的。由於您不想這樣,您也可以編寫一個轉換器類並將其添加到您的綁定中。

public class StringToFormattedTempConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (!(value is string)) 
      return value; 

     return $"{(string)value} \u00B0CC";   
    } 

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

然後將其添加到像這樣的綁定。

forecastWeatherDataTemplate.SetBinding(TextCell.TextProperty, new Binding("mainData.Temperature", BindingMode.Default, new StringToFormattedTempConverter(), null)); 
相關問題