【问题标题】:DateTime Format has not the right culture WP8DateTime 格式没有正确的文化 WP8
【发布时间】:2014-03-12 09:32:17
【问题描述】:

我尝试以法语格式 dd/MM/AAAA hh:mm:ss 显示日期时间。
我有一个英文格式的 DateTime,例如 MM/dd/AAAA hh:mm:ss AM 或 PM
所以我做了这样的解析:

foreach (var _element in listElement)
{
    IFormatProvider culture = new CultureInfo("fr-Fr");
    string date = _element.DateModifElement.ToString();
    _element.DateModifElement = DateTime.Parse(date, culture, DateTimeStyles.NoCurrentDateDefault);

    listElementCollection.Add(_element);
}

它工作得很好,所以现在我的对象中的DateTime 属性具有法语格式。所以我只需要在视图中显示日期即可。

所以我的ObservableCollection 绑定到视图中的LongListSelector,如下所示:

 ObsvCollectionBdeskElement =new ObservableCollection<GroupType<BdeskElement>>(listElementCollection);
llsElements.ItemsSource = ObsvCollectionBdeskElement;

在xml中

<phone:LongListSelector 
    x:Name="llsElements" 
    ItemsSource="{Binding}"
    IsGroupingEnabled="True"
    HideEmptyGroups="False"
    JumpListStyle="{StaticResource LongListSelectorJumpListStyle}"
    LayoutMode="List">

<phone:LongListSelector.ItemTemplate>
    <DataTemplate>  
        <Grid Margin="0,20,0,0" Background="White">
            <toolkit:ContextMenuService.ContextMenu>
                <toolkit:ContextMenu IsZoomEnabled="True" x:Name="ContextMenu" Background="#FF00485A" >
                <toolkit:MenuItem Header="renommer" Click="renommer_Click" Foreground="White" />
                <toolkit:MenuItem  Header="supprimer"  Click="supprimer_Click" Foreground="White" />
            </toolkit:ContextMenu>
        </toolkit:ContextMenuService.ContextMenu>

        <Grid VerticalAlignment="Center" Grid.Column="1" Margin="10,0,20,0"  >
            <TextBlock Grid.Row="1" Margin="0,2,0,0" Text="{Binding DateModifElement}" Foreground="{StaticResource C01}" FontSize="16"/>
        </Grid>  

主网格(布局)有一个由我的对象类型定义的数据上下文。但问题是视图仍然显示英文格式。所以我认为这是应用程序的文化,它是用英文保留的,但不是,我检查了这行代码,值是“fr-FR”。

string info = CultureInfo.CurrentCulture.Name;

【问题讨论】:

  • 您是要“fr-Fr”文化来完成申请还是仅适用于日期格式?
  • 文化应用的属性已经定义为法语...所以我不明白...

标签: datetime windows-phone-8 culture


【解决方案1】:

这是一个已知问题,绑定不使用系统当前区域性来格式化值。 您可以创建自己的值转换器来实现它。

public class FrDateValueConverter
        : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is DateTime)
            {
                var date = (DateTime) value;
                return date.ToString(new CultureInfo("fr-Fr"));
            }

            return value;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

现在您应该将转换器添加到资源中

<FrDateValueConverter x:Key="MyConv" />

最后你应该指定绑定的Converter参数

<TextBlock Grid.Row="1" Margin="0,2,0,0" Text="{Binding DateModifElement, Converter={StaticResource MyConv}}" Foreground="{StaticResource C01}" FontSize="16"/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多