转载:
http://www.cnblogs.com/driverpro/articles/1150836.html
在使用 Silverlight 对绑定数据进行展现的时候(如 ListBox、DataGrid),经常需要对数据的表现形式进行各式各样的处理,Silverlight 对绑定数据的格式化并不像 ASP.NET 中那么方便,在网上查了一些资料发现我们可以使用 IValueConverter 实现绑定数据的格式化。
下面我们用 ListBox 做一个例子:
首先我们先定义一个 MyTime 的类:
public class MyTime
{
public DateTime Time1 { get; set; }
public DateTime Time2 { get; set; }
}
放置一个 ListBox 并且设置绑定:
<ListBox x:Name="MyListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Time1}" Margin="5" Foreground="Red"></TextBlock>
<TextBlock Text="{Binding Time2}" Margin="5"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
创建一个 MyTime 的 List 并对其赋值:
List<MyTime> source = new List<MyTime>();
source.Add(new MyTime() { Time1 = DateTime.Now, Time2 = DateTime.Now });
MyListBox.ItemsSource = source;
运行结果如下,红色为 Time1,黑色为 Time2:
下面我们对 Time1 进行格式化,使其只显示 年月日 ,首先我们先继承一个 IValueConverter 类,用于处理对时间的格式化:
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();
}
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 中注册空间命名并声明:
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 部分只现实年月日了呢:
- 大小: 5.4 KB
- 大小: 4.2 KB
分享到:
相关推荐
你可以使用ICollectionView对数据源进行操作,而不直接影响原始数据。 在实际应用中,你可能还需要处理数据绑定的异常和错误,以及确保性能优化,避免不必要的数据刷新。这可以通过设置ValidationRules、使用...
在这种情况下,可以创建自定义的IValueConverter实现,然后在数据绑定中使用它。 6. **数据模板(DataTemplate)** - 当数据源是复杂对象时,DataTemplate可以定义如何将对象呈现为UI元素。这样,每个对象实例可以...
1. **Silverlight数据绑定基础**:在Silverlight中,数据绑定允许UI元素(如文本框、列表视图等)自动反映数据源的变化。这简化了UI与后台数据模型之间的交互,开发者无需编写大量代码来同步两者。数据绑定是通过...
本教程将深入探讨如何在Silverlight中实现数据绑定,这是任何UI开发中的核心概念,尤其在ASP.NET开发中更为重要。数据绑定使得UI元素能够自动反映数据源的变化,极大地简化了开发过程。 首先,我们需要理解...
2. **数据上下文**:在Silverlight中,控件通常会有一个`DataContext`属性,这是它们进行数据绑定的基础。设置一个控件的`DataContext`为数据源后,该控件及其子控件可以绑定到该数据上下文中的属性。 3. **...
接下来,我们可以在XAML中使用`{x:Static}`标记扩展将这个静态变量绑定到TextBox控件: ```xml ``` 这里的`local`前缀是指命名空间别名,确保XAML能正确找到`StaticData`类。 然而,直接绑定静态变量可能无法达到...
在这个主题中,我们将深入探讨如何在WPF中通过前台代码实现数据绑定,特别是在`ListView`控件中使用数据模板和样式,并应用数据转换。 首先,数据绑定是WPF的核心特性之一,它简化了UI与业务逻辑之间的通信。在WPF...
在Silverlight中,数据绑定允许开发者将控件(如文本框、按钮等)直接连接到数据模型,这样当数据源发生变化时,UI会自动更新,反之亦然,用户对UI的操作也能影响到数据源。 Silverlight的动态Binding体现在它能...
本篇主要讨论如何在Silverlight中使用DataGrid动态绑定Dictionary列表。 首先,Dictionary, TValue>是.NET框架中一个非常实用的集合类,它提供了键值对的存储结构。在Silverlight应用中,我们可能需要展示这种结构...
C#数据绑定是.NET框架中一个关键的概念,它在Windows Forms、WPF(Windows Presentation Foundation)和ASP.NET等环境中广泛使用。数据绑定允许UI(用户界面)组件与数据源进行同步,使得数据的变化能够实时反映在...
Silverlight中的`Binding`类是实现数据绑定的主要工具,可以通过设置`Source`属性指定数据源,`Path`属性指定要绑定的属性路径。此外,还可以设置`Mode`属性来控制数据流向,例如单向或双向绑定。 为了简化数据绑定...
在这个场景中,我们讨论的是如何利用类作为数据源来实现数据绑定。以下是详细的知识点解析: 1. **数据绑定的基本概念**: 数据绑定是一种编程范式,允许UI元素与模型对象(类)之间建立连接。当模型数据发生变化...
有时候,数据源的原始数据可能不适合直接显示在UI上,这时可以使用`IValueConverter`接口创建自定义转换器,将数据转换为适合显示的格式。 7. **双向数据绑定**: 除了单向数据绑定(从数据源到UI),还可以实现...
有时,我们需要在数据绑定过程中对数据进行转换,这时可以使用`IValueConverter`接口。创建一个转换器类,并在XAML中指定: ```csharp public class MyConverter : IValueConverter { public object Convert...
这可以通过在XAML中使用`DataContext="{Binding Source=...}"`或者在代码中使用`element.DataContext = dataSource;`来实现。 3. **绑定控件**:然后,将控件的属性绑定到数据源的特定节点或属性。例如,`[@name='...
在实现ComboBox的数据绑定时,我们需要做以下几步: 1. **创建数据源**:这可能是数据库查询的结果、数组或自定义对象集合。确保这些对象具有一个属性,该属性将作为ComboBox显示的文本。 2. **设置ComboBox的...
- **DataSourceProvider** 提供了一个包装,使得数据模型更易于在XAML中使用,减少了代码量。 - **XmlDataProvider** 允许直接绑定到XML文档,方便数据展示。 以上就是关于WPF数据绑定的详细概述,包括其基本概念...
7. **转换器(Converter)**:用于在数据源值和绑定目标之间转换的自定义类,通过IValueConverter接口实现。 下面以一个简单的例子来说明XAML数据绑定的使用: ```xml DataContext="{Binding Source={...