我正在创建具有预测功能的天气应用。我创建了ListView
TextCell
作为条目。
我想将单元格内的测试格式化为 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。温度是两倍,天气单位有扩展返回String。现在,只有温度值正确显示,日期显示为详细信息:
答案 0 :(得分:1)
您可以创建一个只读属性,为您聚合值,然后绑定到该
public string WeatherData
{
get
{
return $"{Temperature} {Unit}";
}
}
结合
forecastWeatherDataTemplate.SetBinding(TextCell.TextProperty, "mainData.WeatherData ");
答案 1 :(得分:0)
我也喜欢大卫的方法。在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));