在 Silverlight 中使用 IValueConverter 实现对绑定数据的格式化
在使用 Silverlight 对绑定数据进行展现的时候(如 ListBox、DataGrid),经常需要对数据的表现形式进行各式各样的处理,Silverlight 对绑定数据的格式化并不像 ASP.NET 中那么方便,在网上查了一些资料发现我们可以使用 IValueConverter 实现绑定数据的格式化。
下面我们用 ListBox 做一个例子:
首先我们先定义一个 MyTime 的类:
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
放置一个 ListBox 并且设置绑定:
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<sdk:DataGrid IsReadOnly="True" AutoGenerateColumns="False" Name="datagrid1" ItemsSource="{Binding Data, ElementName=proclgDataSource}" Width="Auto" Margin="0">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Header="签署日期">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Umarkdate, Converter={StaticResource DateConverter}}"></TextBlock>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
创建一个 MyTime 的 List 并对其赋值:
List<MyTime> source = new List<MyTime>();
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
source.Add(new MyTime() { Time1 = DateTime.Now, Time2 = DateTime.Now });
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
MyListBox.ItemsSource = source;
运行结果如下,红色为 Time1,黑色为 Time2:
![](https://images.cnblogs.com/cnblogs_com/driverpro/results1.JPG)
下面我们对 Time1 进行格式化,使其只显示 年月日 ,首先我们先继承一个 IValueConverter 类,用于处理对时间的格式化:
代码
在 XAML 中注册空间命名并声明:
xmlns:local="clr-namespace:SilverlightDemo1"
<UserControl.Resources>
<local:DateTimeConverter x:Key="DateConverter" />
</UserControl.Resources>
最后修改 Time1 绑定数据的部分,加入格式化的内容:
<TextBlock Text="{Binding Time1, Converter={StaticResource DateConverter}}" Margin="5" Foreground="Red"></TextBlock>
运行看结果,是不是发现红色的 Time1 部分只现实年月日了呢:
![](https://images.cnblogs.com/cnblogs_com/driverpro/results2.JPG)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
运行结果如下,红色为 Time1,黑色为 Time2:
下面我们对 Time1 进行格式化,使其只显示 年月日 ,首先我们先继承一个 IValueConverter 类,用于处理对时间的格式化:
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
using System.Windows.Data;
using System.Globalization;
public class DateTimeConverter : IValueConverter
{
public object Convert(object value,
Type targetType,
object parameter,
CultureInfo culture)
{
DateTime date = (DateTime)value;
//return date.ToShortDateString();
//return date.ToString("yyyy年MM月dd日 HH:mm:ss");
return date.ToString("yyyy-MM-dd");
}
public object ConvertBack(object value,
Type targetType,
object parameter,
CultureInfo culture)
{
string strValue = value.ToString();
DateTime resultDateTime;
if (DateTime.TryParse(strValue, out resultDateTime))
{
return resultDateTime;
}
return value;
}
}
在 XAML 中注册空间命名并声明:
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
最后修改 Time1 绑定数据的部分,加入格式化的内容:
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
运行看结果,是不是发现红色的 Time1 部分只现实年月日了呢: