使用UWP和x的字符串格式:绑定

Ian*_* GM 10 c# xaml uwp

有没有人知道在使用x时格式化日期:在UWP Windows 10应用程序中绑定?

我有一个TextBlock绑定(x:Bind)到我的ViewModel上的DateTime属性,该属性从SQL读取.我想将输出格式化为"dd/MM/yyy HH:mm(ddd)".有一个简单的方法吗?

默认格式为"dd/MM/yyy HH:mm:ss",我认为它来自默认值.可能会被替换吗?

谢谢.

sib*_*bbl 23

使用a StringFormatConverter(检查你是否可以使用一些已经包含它的库,例如Cimbalino Toolkit):

public class StringFormatConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value == null)
            return null;

        if (parameter == null)
            return value;

        return string.Format((string)parameter, value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

将其添加到您的页面资源

<Page.Resources>
    <converters:StringFormatConverter x:Key="StringFormatConverter" />
</Page.Resources>
Run Code Online (Sandbox Code Playgroud)

并像这样使用它

<TextBlock Text="{x:Bind Text, Converter={StaticResource StringFormatConverter}, ConverterParameter='{}{0:dd/MM/yyy HH\\\\:mm (ddd)}'}" />
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚注意到这也是 UWP 工具包的一部分:https://docs.microsoft.com/en-us/windows/communitytoolkit/helpers/converters (2认同)

Iva*_*van 7

您可以使用

{x:Bind ViewModel.DateTimeProperty.ToString("....")}
Run Code Online (Sandbox Code Playgroud)

  • 在我的情况下,因为编译器解释我正在调用ToString(IFormatProvider)重载,所以我将调用(string,IFormatParameter)重载,如下所示:{x:Bind ViewModel.DateTimeProperty.ToString(' ......',{x:Null})} (5认同)

Ala*_*bra 5

格式化日期时间

函数绑定是比经典 Converter 更好的方法:

 <TextBlock Text="{x:Bind DateTimeToString(MyDateTime,'dd/MM/yyy HH\\\\:mm (ddd)')}" />
Run Code Online (Sandbox Code Playgroud)

隐藏代码(可以放在单独的类中):

//"Converter"
public string DateTimeToString(DateTime dateTime, string format) => dateTime.ToString(format);

public DateTime MyDateTime { get; set; } = DateTime.Now;

Run Code Online (Sandbox Code Playgroud)

为什么它比经典转换器更好?

  • 较短 -> 无煮辫代码
  • 强类型 -> 检测构建时的异常。