2017-01-09 10 views
0

私は予報で天気予報アプリを作成しています。私は入力としてTextCellListViewを作成しました。 私はXXX YYにセル内部のテストをフォーマットしたい:私は、XamarinフォームListViewデータ2つのオブジェクトでバインド

  • XXXは私がContentPageで観察可能なコレクションを宣言しているし、それは私のItemSourceある
  • YYはユニット

値であります別の重要な財産、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; 
} 

私は温度とweatherUnitする書式を結合TextCell.TextPropertyに追加するにはどうすればよいです。温度は2倍で、気象ユニットにはStringを返すExtensionがあります。今のところ、唯一の温度値が正しく表示や詳細などです更新日:

Current state

答えて

1

あなたはあなたのための値をconcats読み取り専用プロパティを作成し、その

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

結合

に特異的に結合することができます
forecastWeatherDataTemplate.SetBinding(TextCell.TextProperty, "mainData.WeatherData "); 
+0

OKですが、この予測データフォームは、Newtonsoft.Jsonライブラリを使用してJSON形式になっています。だから私はクラスにシリアル化の一部ではなく、かなりではないユニットを追加しているだろう。私はiOS cellForRowAtIndexPathメソッドのアプローチに慣れています。ここでは、コード内のすべてをフォーマットして設定できます。 – Preetygeek

0

私はDavidのアプローチも好きです。 JSONクラスにget-onlyプロパティを持たせることは心配ありません。このようにしたくないので、コンバータクラスを作成してバインディングに追加することもできます。

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)); 
関連する問題