最近做的silverlight项目中要求将TextBox与Slider进行TwoWay绑定,但因为silder中的Value值默认为double型,发现TextBox中显示的值总是有很长的小数,经查询发现绑定的数据可以通过silverlight里提供的IValueConverter接口来实现转换:
后台:
//将double转换成int public class IntConverter : IValueConverter { public object Convert(object Value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (Value == null) { return Value = 0; } else { try { return (Value.ToString().Split('.')[0]); } catch (Exception ex) { return 0; } } } public object ConvertBack(object Value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return Value; } }
Xmal:
首先引入当前项目:
<controls:ChildWindow x:Class="MySL.PopWindow.ParameterSetting" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:my="clr-namespace:MySL" xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" Width="653" Height="410" Title="ChildWindow" Name="thisParameterSetting"> <controls:ChildWindow.Resources> <my:IntConverter x:Key="InConvert"></my:IntConverter> </controls:ChildWindow.Resources>
然后在TextBox中加入:
<TextBox Grid.Row="3" Grid.Column="2" Height="23" Text="{Binding Value,ElementName=sld_SATURATION,Mode=TwoWay,Converter={StaticResource InConvert}}"></TextBox>
这样silder滑动时显示的就是整数了,IValueConverter接口可以实现很灵活的输出。不过后来发现还有更简单的方法,那就是用到绑定中的StringFormat进行格式化输出:
<TextBox Grid.Row="0" Grid.Column="2" Height="23" Text="{Binding Value,ElementName=sld_SHARP,Mode=TwoWay,StringFormat='\{0:F0\}'}"></TextBox>
后来经查找发现StringFormat可以轻松的实现绑定数据中各种格式化的输出,例如:
<Textblock1 Text=“{Binding Name, StringFormat=’用户名: \{0\}’}”>(绑定数据中加入字符串)
<sdk:DataGridTextColumn Header="版本" Binding="{Binding dwDevVersion,StringFormat='\{0:X4\}'}"(以十六进制输出,显示四位数)
<Textblock1 Text=“{Binding datetime, StringFormat='MMM d, yyy'}”>(日前显示格式)
具体用法有很多,大家可以去网上搜索