日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据绑定(十)Binding的数据转换

發(fā)布時(shí)間:2025/6/16 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据绑定(十)Binding的数据转换 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
原文:數(shù)據(jù)綁定(十)Binding的數(shù)據(jù)轉(zhuǎn)換

當(dāng)Source端Path所關(guān)聯(lián)的數(shù)據(jù)與Target端目標(biāo)屬性數(shù)據(jù)類型不一致時(shí),需要添加數(shù)據(jù)轉(zhuǎn)換器,數(shù)據(jù)轉(zhuǎn)換器是一個(gè)自定義的類,這個(gè)類需要實(shí)現(xiàn)IValueConverter接口,這個(gè)接口有兩個(gè)方法需要實(shí)現(xiàn):Convert和ConvertBack,當(dāng)數(shù)據(jù)從Source流向Target時(shí),將調(diào)用Convert方法,反之,將調(diào)用ConvertBack方法

例子,首先定義飛機(jī)類型

public enum Category{Bomber,Fighter}public enum State{Available,Locked,Unknown}public class Plane{public Category Category { get; set; }public string Name { get; set; }public State State { get; set; }}
Plane類型的Category將在界面上轉(zhuǎn)換為圖片,而State類型將會(huì)轉(zhuǎn)換成界面上的CheckBox顯示,由于存在兩個(gè)轉(zhuǎn)換,因此需要提供兩個(gè)Converter,第一個(gè)轉(zhuǎn)換是做Category類型與字符類型的轉(zhuǎn)換,字符串是圖片的路徑

class CategoryToSourceConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){Category c = (Category)value;switch (c){case Category.Bomber:{return @"\Icons\close.png";}case Category.Fighter:{return @"\Icons\closeing.png";}default:{return null;}}}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){return new NotImplementedException();}}
由于UI上不能修改圖片,所以只實(shí)現(xiàn)了從Source到Target的轉(zhuǎn)換

另一個(gè)轉(zhuǎn)換用于將State數(shù)據(jù)轉(zhuǎn)換為bool?

public class StateToNullableBoolConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){State s = (State)value;switch (s){case State.Locked:{return false;}case State.Available:{return true;}case State.Unknown:default:{return null;}}}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){bool? nb = (bool?)value;switch (nb){case true:{return State.Available;}case false:{return State.Locked;}case null:default:{return State.Unknown;}}}}
界面代碼:

<Window x:Class="WpfApplication1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApplication1"Title="MainWindow" Height="275" Width="275"> <Window.Resources><local:CategoryToSourceConverter x:Key="cts" /><local:StateToNullableBoolConverter x:Key="stnb" /></Window.Resources><StackPanel Background="LightBlue"><ListBox x:Name="listBoxPlane" Height="160" Margin="5"><ListBox.ItemTemplate><DataTemplate><StackPanel Orientation="Horizontal"> <Image Width="20" Height="20" Source="{Binding Path=Category, Converter={StaticResource cts}}" /><TextBlock Text="{Binding Path=Name}" Width="60" Margin="80,0" /><CheckBox IsThreeState="True" IsChecked="{Binding Path=State, Converter={StaticResource stnb}}" /></StackPanel></DataTemplate></ListBox.ItemTemplate></ListBox><Button x:Name="buttonLoad" Content="Load" Height="25" Margin="5,0" Click="buttonLoad_Click" /><Button x:Name="buttonSave" Content="Save" Height="25" Margin="5,0" Click="buttonSave_Click" /></StackPanel> </Window>
加粗的部分是XAML中對(duì)轉(zhuǎn)換器的使用,后臺(tái)代碼中實(shí)現(xiàn)了Load和Save兩個(gè)按鈕的點(diǎn)擊事件

private void buttonLoad_Click(object sender, RoutedEventArgs e){List<Plane> planeList = new List<Plane>(){new Plane(){Category=Category.Bomber, Name="B-1", State=State.Unknown},new Plane(){Category=Category.Bomber, Name="B-2", State=State.Unknown},new Plane(){Category=Category.Fighter, Name="F-22", State=State.Unknown},new Plane(){Category=Category.Fighter, Name="Su-47", State=State.Unknown},new Plane(){Category=Category.Bomber, Name="B-52", State=State.Unknown},new Plane(){Category=Category.Fighter, Name="J-10", State=State.Unknown}};listBoxPlane.ItemsSource = planeList;}private void buttonSave_Click(object sender, RoutedEventArgs e){StringBuilder sb = new StringBuilder();foreach (Plane p in listBoxPlane.Items){sb.AppendLine(string.Format("Category={0}, Name={1}, State={2}", p.Category, p.Name, p.State));}File.WriteAllText(@"d:\PlaneList.txt", sb.ToString());}

界面效果如圖:


當(dāng)改變checkbox的選中狀態(tài)時(shí),Plane對(duì)象中的值會(huì)發(fā)生變化


總結(jié)

以上是生活随笔為你收集整理的数据绑定(十)Binding的数据转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一区二区三区四区人妻 | 性生活视频网站 | 波多野结衣一区二区三区四区 | 超碰免费在线97 | 久久久www成人免费毛片 | 最新国产精品视频 | 黄色aaa视频 | 91精品国产综合久久福利软件 | 亚洲第一成网站 | 亚洲大尺度视频 | 波多野吉衣av无码 | 青青操狠狠干 | 国产精品99视频 | 免费精品视频在线观看 | 国产成人一区二区三区视频 | 久久婷婷综合国产 | 一区二区三区四区在线免费观看 | 中文字幕777| 国产精品国产三级国产专区52 | 69福利区| 色噜噜网站 | 91看片免费看 | 四虎影库永久在线 | 欧美日韩一卡 | 另类激情亚洲 | 日本熟妇人妻中出 | 99国产精品久久久久久久 | 久久羞羞 | 亚洲精品乱码久久久久久蜜桃不卡 | 国产色视频在线 | 美女黄色一级视频 | 精品一区二区久久久 | 亚洲精品国产手机 | 国产福利二区 | 黑人vs亚洲人在线播放 | 无码一区二区三区在线 | 姐姐你真棒插曲快来救救我电影 | 久久综合亚洲 | 国产首页 | 欧美一区二区最爽乱淫视频免费看 | 19禁大尺度做爰无遮挡电影 | 欧美男人操女人 | 精品人妻一区二区三区四区五区 | 91精品导航 | 日本视频h | 欧美八区| 亚洲在线色 | 91福利在线观看视频 | 欧美一区二 | 天堂福利在线 | 成年人免费在线观看视频网站 | 亚洲精品乱码久久久久久黑人 | aa视频在线观看 | 国产精品九九热 | 五月婷婷中文 | 亚洲成网站 | 最污网站在线观看 | 久久午夜夜伦鲁鲁片 | 91直接看| 日本在线视频一区二区三区 | 青青草婷婷 | 中国av在线 | 欧美激情一二区 | 日韩在线资源 | 草草视频在线观看 | 成年人天堂 | 国产伦精品一区二区三区网站 | 黄色一几片 | 天堂中文视频 | 中文字幕在线观看视频免费 | 日韩av三级在线 | 日本少妇在线观看 | 色666 | 波多野结衣黄色片 | 国产精品欧美激情 | 在线看91| 国产91页| 超薄肉色丝袜一区二区 | 一级片中文 | 亚洲精品久久久久久久久久 | 亚洲精品一区二区三区新线路 | 蜜臀久久99精品久久久 | 噼里啪啦国语版在线观看 | 黄色污小说 | 郑艳丽三级 | 久久久久中文字幕 | 天天爽| 99在线国产| 国产1区2区 | 中文字幕免费高清网站 | 久久av红桃一区二区小说 | 草av| 夜福利视频 | 久久免费视频6 | 少妇福利在线 | 高级毛片 | 91入囗 | 中文字幕www| 日韩在线观看一区 |