我們經(jīng)常有這樣的需求,給xaml的一個(gè)元素綁定一個(gè)值,但是顯示用綁定值來(lái)顯示其他的值。比如從數(shù)據(jù)庫(kù)中取出的日期是2010-11-14,顯示的時(shí)候需要顯示2010年11月14日,怎么解決這個(gè)需求呢?silverlight給我們提供了一個(gè)IValueConverter接口來(lái)解決這個(gè)問(wèn)題。
該接口有兩個(gè)方法:
Convert:在將源數(shù)據(jù)傳遞到目標(biāo)以在 UI 中顯示之前,對(duì)源數(shù)據(jù)進(jìn)行修改。
ConvertBack:在將目標(biāo)數(shù)據(jù)傳遞到源對(duì)象之前,對(duì)目標(biāo)數(shù)據(jù)進(jìn)行修改。此方法僅在 TwoWay 綁定中進(jìn)行調(diào)用。
我們接下來(lái)來(lái)實(shí)現(xiàn)一個(gè)日期的例子:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null || value.ToString() == "") return "";
string param = parameter as string;
if (param == "A")
{
try
{ return DateTime.Parse(value.ToString()).ToString("yyyy年MM月dd日"); }
catch
{ throw; }
}
else
{
try
{ return DateTime.Parse(value.ToString()).ToLongTimeString(); }
catch
{ throw; }
}
}
這個(gè)方法用到了要在轉(zhuǎn)換器邏輯中使用的可選參數(shù)進(jìn)行日期的轉(zhuǎn)換。
xaml代碼比較簡(jiǎn)單直接貼出來(lái):
<Grid x:Name="LayoutRoot" Background="White">
<sdk:DatePicker Height="23" HorizontalAlignment="Left" Margin="88,52,0,0" Name="datePicker1" VerticalAlignment="Top" Width="120" />
<TextBlock Height="53" HorizontalAlignment="Left" Margin="88,95,0,0" Name="textBlock1" Text="{Binding ElementName=datePicker1, Path=Text,Converter={StaticResource converter}, ConverterParameter=A}" VerticalAlignment="Top" Width="142" />
<TextBlock Height="58" HorizontalAlignment="Left" Margin="88,154,0,0" Name="textBlock2" Text="{Binding ElementName=datePicker1,Path=Text,Converter={StaticResource converter}, ConverterParameter=B}" VerticalAlignment="Top" Width="142" />
</Grid>
運(yùn)行結(jié)果:
代碼比較簡(jiǎn)單,不再贅述,有興趣的同學(xué)可以下載參考:代碼下載