微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Silverlight XAML TextBlock中的当前日期

我来自Flex,你可以在花括号内做任何事情.我试图让TextBlock显示今天的日期和时间而不用在C#中编码.我尝试了以下许多不同的变化而没有运气.

TextBlock Text="{Source=Date,Path=Now,StringFormat='dd/MM/yyyy'}"

我知道我可能只是设置一个属性MyDate并绑定到那个,但为什么我不能直接绑定到DateTime.Now属性

解决方法

Silverlight中的绑定需要Source对象或Dependency对象.从该源对象,您可以绑定到Properties(因此根据定义,您绑定到实例成员)或依赖属性.

由于DateTime.Now一个静态属性,因此无法直接在Silverlight中绑定它,因此需要一些代码.接下来最好的事情是使用代码: –

>确保您可以在XAML中表达所需的内容
>尽可能以解耦的方式这样做.

因此,我们可以分析我们需要两件事.

>将DateTime的静态成员公开为某个对象的实例属性
>有一些方法可以将DateTime格式化为所需的输出.

要处理第一项,我将创建一个StaticSurrogate类,在那里我将为我们需要访问的静态属性创建实例属性: –

public class StaticSurrogate
{
    public DateTime Today { get { return DateTime.Today; } }
    public DateTime Now { get { return DateTime.Now; } }
}

现在我们需要一种格式化日期时间的方法.价值转换器是这项工作的正确工具,从Tim Heuer Blog大量借款: –

public class FormatConverter : IValueConverter
{
    public object Convert(object value,Type targettype,object parameter,System.Globalization.CultureInfo culture)
    {
        if (parameter != null)
        {
            string formatterString = parameter.ToString();

            if (!String.IsNullOrEmpty(formatterString))
            {
                return String.Format(culture,String.Format("{{0:{0}}}",formatterString),value);
            }
        }

        return (value ?? "").ToString();
    }

    public object ConvertBack(object value,System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

有了这两个类,我们现在可以在Xaml中完成其余的工作,首先我们需要在我们的资源中使用这些类的实例:

<UserControl.Resources>
    <local:StaticSurrogate x:Key="Static" />
    <local:FormatConverter x:Key="Formatter" />     
</UserControl.Resources>

现在我们可以连接TextBlock: –

<TextBlock Text="{Binding Today,Source={StaticResource Static},Converter={StaticResource Formatter},ConverterParameter='dd MMM yyy'}" />

请注意,此方法具有以下优点: –

>我们不需要向放置TextBlock的UserControl添加代码,也不需要摆弄任何数据上下文.>静态资源可以放在App.Resources中,这将使TextBlock的创建完全独立于必须向UserControl添加任何其他内容.>可以单独修改用于显示日期的格式.>可以轻松地将对其他静态属性的访问添加到StaticSurrogate类.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐