one*_*com 0 c# xaml uwp uwp-xaml xamarin.uwp
我在共享的PCL(适用于android和uwp应用)中具有模型类,其中包含datetime属性:
public class Meter {
public int meter_value {get; set; }
public DateTime meter_start { get; set; }
public DateTime meter_end { get; set; }
... other int and string properties
}
Run Code Online (Sandbox Code Playgroud)
在MainPage.cs中,我有
public Meter _meter;
public MainPage()
{
this.InitializeComponent();
_meter = new Meter();
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用以下代码将其绑定到xaml控件:
<TextBox
Text="{x:Bind _meter.meter_value, Mode=TwoWay}">
<CalendarDatePicker
Name="meter_start"
Date="{x:Bind _meter.meter_start, Mode=TwoWay}"
DateFormat="{}{day.integer}/{month.integer}/{year.full}" >
</CalendarDatePicker>
Run Code Online (Sandbox Code Playgroud)
此代码产生编译时错误: Invalid binding path '_meter.meter_start' : Cannot bind type 'System.DateTime' to 'System.Nullable(System.DateTimeOffset)' without a converter
当我将x:Bind更改为Binding时,将进行applicaton编译,但是我的模型中meter_start属性的值为0001/01/01。
有人可以帮我解决这个问题吗?
如错误所示,您需要一个转换器-CalendarPicker.Date是类型Nullable<DateTimeOffset>,属性是DateTime。这是我测试过的一个简单示例-代码中:
public class TimeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return new DateTimeOffset(((DateTime)value).ToUniversalTime());
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return ((DateTimeOffset)value).DateTime;
}
}
Run Code Online (Sandbox Code Playgroud)
在XAML中:
<Page.Resources>
<local:TimeConverter x:Key="TimeConverter"/>
</Page.Resources>
... later
<CalendarDatePicker Name="meter_start" Date="{x:Bind _meter.meter_start, Mode=TwoWay, Converter={StaticResource TimeConverter}}"
DateFormat="{}{day.integer}/{month.integer}/{year.full}"/>
Run Code Online (Sandbox Code Playgroud)
如果您还要在某处更改from代码,则可以考虑实现INotifyPropertyChanged并引发PropertyChanged事件_meter。
还要注意,在处理DateTime和DateTimeOffset时,需要注意适当的转换(时区等)。您将在此SO问题中找到更多信息。
| 归档时间: |
|
| 查看次数: |
1266 次 |
| 最近记录: |