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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WPF实例秀——不用属性也Binding

發布時間:2025/3/20 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF实例秀——不用属性也Binding 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
WPF實例秀——不用屬性也Binding 正文: 實際編程中,因為我們較多地使用到Binding類的Source與Path,所以可能會有一個思維定式,那就是:有可能作為數據源的類一定要準備好一些屬性,這些屬性將作為Binding的Path。 如果本著這個思想去設計有可能作為數據源的類,那么會有兩個問題出現: 1. 這個類的哪些屬性有可能作為數據源的Path?是都需要激發NotifyPropertyChanged事件,還是用到了再添加?這很有可能讓這個類遲遲不能封閉。 2. 需要用屬性把一些方法包裝起來,用來暴露給Binding,造成冗余和語義上的不美觀。 其實,WPF類庫里有一個名為ObjectDataProvider的類就是專門為了解決這個矛盾的——有了這個類,你在設計自己的類的時候就不必總想著把它設計成數據源的事兒了,該怎么抽象就怎么抽象、該怎么封裝就怎么封裝。 你可能會問:“如果這個類已經封閉了(不再改動)而我又需要拿它當數據源了,碰巧所需要的數據是它某個方法的返回值,沒有對應屬性,怎么辦?”OK,這就是ObjectDataProvider的用武之地了——使用它,可以在你這個類的實例外面加上一層“包裝”(或者說是加個殼兒),使它變成一個標準的Binding數據源。如果沒記錯的話,這應該是著名的“適配器模式”。 下面,我們用一段簡單的代碼來學習如何使用ObjectDataProvider。 這個例子簡單到不能再簡單——三個TextBox,在前兩個里輸入合適的數字,在第三個里會顯示它們的和。按照UI與邏輯分開的原則,計算加法的功能應該由某個類來實現。 后臺負責計算的類是這樣:
  • ????public?class?Calculator
  • ????{
  • ????????public?int?Add(int?arg1,?int?arg2)
  • ????????{
  • ????????????return?arg1?+?arg2;
  • ????????}
  • ????????public?string?Add(string?arg1,?string?arg2)
  • ????????{
  • ????????????int?x?=?0;
  • ????????????int?y?=?0;
  • ????????????if?(int.TryParse(arg1,?out?x)?&&?int.TryParse(arg2,?out?y))
  • ????????????{
  • ????????????????return?this.Add(x,?y).ToString();
  • ????????????}
  • ????????????else
  • ????????????{
  • ????????????????return?"Input?Error!";
  • ????????????}
  • ????????}
  • ????}
  • 大家看到了,設計這個類的時候,涉及到加法運算的邏輯時,任何一個程序員都會很自然地采用一個方法來實現,而不會為了把它做成一個Binding的數據源專門把這些方法封裝進屬性里——這樣就破壞了面向對象的抽象。 然后,讓我們看看如何使用ObjectDataProvider來包裝這個類。
  • <Window?x:Class="WpfApplicationAdd.Window1"
  • ????xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  • ????xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  • ????????xmlns:local="clr-namespace:WpfApplicationAdd"
  • ????????xmlns:system="clr-namespace:System;assembly=mscorlib"
  • ????Title="Add"?Height="136"?Width="230"?Background="SteelBlue">
  • ????<Window.Resources>
  • ????????<ObjectDataProvider?x:Key="odp"?ObjectType="{x:Type?local:Calculator}"?MethodName="Add">
  • ????????????<ObjectDataProvider.MethodParameters>
  • ????????????????<system:String>0</system:String>
  • ????????????????<system:String>0</system:String>
  • ????????????</ObjectDataProvider.MethodParameters>
  • ????????</ObjectDataProvider>
  • ????</Window.Resources>
  • ????<StackPanel>
  • ????????<TextBox?x:Name="textBox1"?Margin="5"?Text="{Binding?Source={StaticResource?odp},?Path=MethodParameters[0],?BindsDirectlyToSource=true,?UpdateSourceTrigger=PropertyChanged}"?/>
  • ????????<TextBox?x:Name="textBox2"?Margin="5"?Text="{Binding?Source={StaticResource?odp},?Path=MethodParameters[1],?BindsDirectlyToSource=true,?UpdateSourceTrigger=PropertyChanged}"/>
  • ????????<TextBox?x:Name="textBox3"?Margin="5"?Text="{Binding?Source={StaticResource?odp},?Mode=OneWay}"/>
  • ????</StackPanel>
  • </Window>
  • 運行起來之后,你就能看到這樣的結果了:








    本文轉自 水之真諦 51CTO博客,原文鏈接:http://blog.51cto.com/liutiemeng/121349,如需轉載請自行聯系原作者 與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的WPF实例秀——不用属性也Binding的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。