WPF DataGrid 多绑定设置
在WPF中 DataGrid 转换使用多绑定参数转换的使用方法:
1.集成 IMultiValueConverter 接口,实现一个转换器:
namespace XQ.View { public class AgeTransformation : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { string agestr = string.Empty; try { var patage = values[0].ToString(); var birdate = values[1].ToString(); if ((patage.IsNullOrWhiteSpace() &&birdate.IsNullOrWhiteSpace())) { return string.Empty; } if (!string.IsNullOrWhiteSpace(patage)) { return patage; } DateTime birthday = birdate.ToDateTime(); DateTime NowDate = DateTime.Now; int age = 0; string UnitName = string.Empty; GlobalVar.BirthDateToAge(birthday, NowDate, ref age, ref UnitName); agestr = age + UnitName; } catch (Exception ex) { XCommon.XLog.LogError(ex); } return agestr; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } }
在UI中导入类型:
xmlns:XQ="clr-namespace:XQ.View"
样式中定义转换器:
<UserControl.Resources> <XQ:AgeTransformation x:Key="AgeTransformation"/> </UserControl.Resources>
在DataGrid 列属性中设置绑定信息:
<DataGrid AlternatingRowBackground="AliceBlue" CanUserSortColumns="False" ItemsSource="{Binding Path=DTPatientinfoDV}" AlternationCount="2" AutoGenerateColumns="False" Background="White" BorderBrush="Gray" BorderThickness="1" FontSize="13.333" HorizontalGridLinesBrush="Gray" IsEnabled="True" Name="DataGridSearch" VerticalGridLinesBrush="Gray" > <DataGrid.Columns> <DataGridTextColumn Binding="{Binding NUM}" Header="编号" IsReadOnly="True" SortMemberPath="NUM" Visibility="Hidden" Width="50" /> <DataGridTextColumn Binding="{Binding PATNAME}" Header="姓名" IsReadOnly="True" SortMemberPath="PATNAME" Width="70" /> <DataGridTextColumn Binding="{Binding SEX}" Header="性别" IsReadOnly="True" SortMemberPath="SEX" Width="35" /> <DataGridTextColumn Header="年龄" IsReadOnly="True" Width="50"> <DataGridTextColumn.Binding> <MultiBinding Converter="{StaticResource AgeTransformation}"> <Binding Path="PAT_AGE" ></Binding> <Binding Path="BIRTHDATE" StringFormat="yyyy-MM-dd"></Binding> </MultiBinding> </DataGridTextColumn.Binding> </DataGridTextColumn> </DataGrid.Columns> </DataGrid>
这样就可以使用.
备注:
如果绑定的数据源值为空或者没有对应的绑定列 显示的值属性比较怪异(显示成了:{DependencyProperty.UnsetValue}),
如图
暂时也没有找到解决的办法,如果有版本可以留言告诉我。