datagrid绑定问题
xaml:
<data:DataGrid x:Name="myImgs" AutoGenerateColumns="False"> <data:DataGrid.Columns> <data:DataGridTemplateColumn Header="缩略图"> <data:DataGridTemplateColumn.CellTemplate> <DataTemplate> <Image Resources="{Binding Name}" Width="80" Height="80"></Image> </DataTemplate> </data:DataGridTemplateColumn.CellTemplate> </data:DataGridTemplateColumn> <data:DataGridTextColumn Header="文件名" Binding="{Binding Name}"></data:DataGridTextColumn> <data:DataGridTextColumn Header="大小(byte)" Binding="{Binding Length}"></data:DataGridTextColumn> </data:DataGrid.Columns> </data:DataGrid>
OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true; dialog.ShowDialog(); myImgs.ItemsSource = dialog.Files;
using System;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Ink;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;using System.Globalization;using System.Windows.Data;#region 为百分数定义转换器 //定义一个转换类 并被页面引用为资源 /* * IValueConverter - 值转换接口,将一个类型的值转换为另一个类型的值。它提供了一种将自定义逻辑应用于绑定的方式 * Convert - 正向转换器。将值从数据源传给绑定目标时,数据绑定引擎会调用此方法 * ConvertBack - 反向转换器。将值从绑定目标传给数据源时,数据绑定引擎会调用此方法 */ /// <summary> /// 正向转换器。将值从数据源传给绑定目标时,数据绑定引擎会调用此方法 /// </summary> /// <param name="value">转换之前的值</param> /// <param name="targetType">转换之后的类型</param> /// <param name="parameter">转换器所使用的参数</param> /// <param name="culture">转换器所使用的区域信息</param> /// <returns>转换后的值</returns> public class ByteToKbConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { double d = (double)value; return Math.Round(d/1024, 2).ToString(); } /// <summary> /// 反向转换器。将值从绑定目标传给数据源时,数据绑定引擎会调用此方法 /// </summary> /// <param name="value">转换之前的值</param> /// <param name="targetType">转换之后的类型</param> /// <param name="parameter">转换器所使用的参数</param> /// <param name="culture">转换器所使用的区域信息</param> /// <returns>转换后的值</returns> public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { //反向转换 string strValue = value.ToString(); //... return value; } } #endregion然后在DataGrid绑定的时候,使用转换器即可 首先在需要使用转换的页面中加入下语句:xmlns:local="clr-namespace:XXX" //XXX是你Silverlight的项目命名空间然后添加:<UserControl.Resources> <local:DateTimeConverter x:Key="ByteToKbConverter" /></UserControl.Resources><sdk:DataGrid Margin="0" AutoGenerateColumns="False" x:Name="dg"> <sdk:DataGrid.Columns> <sdk:DataGridTemplateColumn Header="大小(byte)"> <sdk:DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Length,Convert={StaticResource ByteToKbConverter}}"></TextBlock> </DataTemplate> </sdk:DataGridTemplateColumn.CellTemplate> </sdk:DataGridTemplateColumn> </sdk:DataGrid.Columns></sdk:DataGrid>