Silverlight 4之旅(三)数据绑定(中)
在上篇文章中我們已經(jīng)看過(guò)了綁定的基礎(chǔ)知識(shí),以及綁定數(shù)據(jù)源的選擇問(wèn)題。在本篇文章中我們看下綁定時(shí)Target的現(xiàn)實(shí)的問(wèn)題。
自定義顯示
很多時(shí)候我們的DataSource存儲(chǔ)的數(shù)據(jù)并不可以直接用來(lái)顯示,比如說(shuō)我們對(duì)于Bool類型,需要顯示為“是”或則“否”而不是“True”,“False”,甚至有的時(shí)候我們需要將DataSource的某個(gè)屬性在多個(gè)不同的UI的地方進(jìn)行不同的顯示。
在我們進(jìn)行綁定的時(shí)候,綁定機(jī)制默認(rèn)選擇類型的ToString方法進(jìn)行綁定到UI上面,還好,在Silverlight中提供了Formatting的機(jī)制讓我們來(lái)自定義我們的顯示。我們可以通過(guò)Formatting來(lái)定義格式化我們的顯示,同時(shí)我們也可以通過(guò)Convert來(lái)進(jìn)行轉(zhuǎn)換,下面我們來(lái)看看Formatting部分。
Formatting&Converter
在我們編寫的代碼中,我們可以通過(guò)String.Format方法進(jìn)行一個(gè)值的格式化,在綁定時(shí)我們也可以使用,其語(yǔ)法類似于String.Format。比如我們我們希望將一個(gè)Decimal類型的顯示為¥2011,我們可以通過(guò)這種方式:
<TextBlock Text="{Binding Total,StringFormat=\{0:C\}}"></TextBlock>?
可是大部分時(shí)候,簡(jiǎn)單的Format對(duì)我們來(lái)說(shuō)是不夠用的,更多時(shí)候我們需要Convert來(lái)轉(zhuǎn)換我們Source的值,比如說(shuō)我們需要Bool值類型的顯示為否\是.我們?cè)诙x一個(gè)Convert時(shí)必須需要繼承于IValueConverter接口,在IValueConverter中有兩個(gè)方法:Convert、ConvertBack。Convert方法是指將將Source數(shù)據(jù)綁定到Target時(shí)轉(zhuǎn)換動(dòng)作,而ConvertBack是指將Target的數(shù)據(jù)返回到Source時(shí)的轉(zhuǎn)換。下面我們來(lái)定義一個(gè)BooleanConvert:
public class BooleanConvert : IValueConverter {public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){var booleanValue = Boolean.Parse(value.ToString());if (booleanValue) return "Yes";return "No";}public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){var strValue = value.ToString().ToLower();if (strValue.Equals("yes"))return true;return false;} }我們看看如何使用,在原來(lái)的Person中增加了Married屬性:
private bool _Married; public bool Married { get { return _Married; }set {_Married = value;NotifyPropertyChanged("Married");} }然后我們?cè)儋Y源中增加BooleanConver的引用:
<UserControl.Resources><local:BooleanConvert x:Key="BooleanConvert"></local:BooleanConvert></UserControl.Resources>在ListBox中增加Married:
<TextBlock Text="Married:" FontSize="12" Margin="3,3,0,0" Grid.Column="2"></TextBlock> <TextBlock Text="{Binding Married,Converter={StaticResource BooleanConvert}}"FontSize="12" Margin="0,3,0,0" Grid.Column="3"></TextBlock>運(yùn)行效果:
在有的時(shí)候我們會(huì)出現(xiàn)轉(zhuǎn)換錯(cuò)誤,這個(gè)時(shí)候我們需要提供默認(rèn)的fallback Value,下面我們看下兩個(gè)中特殊情況下的處理。
fallback values & null values
在綁定時(shí)候,總會(huì)出現(xiàn)錯(cuò)誤的情況,比如在一個(gè)屬性的Geter中發(fā)生錯(cuò)誤了等等,這個(gè)時(shí)候我們?cè)诮壎ǖ谋磉_(dá)式中指定下FallbackValue是非常有用的,我們可以這樣指定:
<TextBlock Text="{Binding Married,Converter={StaticResource BooleanConvert},FallbackValue=Error}"FontSize="12" Margin="0,3,0,0" Grid.Column="3"></TextBlock>?
有的時(shí)候我們的源數(shù)據(jù)中是Null值的時(shí)候,我們也需要額外的進(jìn)行顯示,在表達(dá)式中,我們可以通過(guò)指定TargetNullValue:
<TextBlock Text="{Binding Married,Converter={StaticResource BooleanConvert},FallbackValue=Error,TargetNullValue=Miss}"FontSize="12" Margin="0,3,0,0" Grid.Column="3"></TextBlock>?
總結(jié)
本篇文章中我們主要看過(guò)了數(shù)據(jù)綁定時(shí)的自定義顯示方面的內(nèi)容,下篇文章中會(huì)就數(shù)據(jù)模板進(jìn)行了解。
轉(zhuǎn)載于:https://www.cnblogs.com/Henllyee/archive/2011/08/07/Silverlight4-trip-Third.html
總結(jié)
以上是生活随笔為你收集整理的Silverlight 4之旅(三)数据绑定(中)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 注入技术--LSP劫持注入
- 下一篇: 网络渗透知识