WPF例項秀不用屬性也Binding

2021-06-20 04:19:05 字數 2254 閱讀 6036

實際程式設計中,因為我們較多地使用到binding類的source與path,所以可能會有乙個思維定式,那就是:有可能作為資料來源的類一定要準備好一些屬性,這些屬性將作為binding的path。

如果本著這個思想去設計有可能作為資料來源的類,那麼會有兩個問題出現:

1. 這個類的哪些屬性有可能作為資料來源的path?是都需要激發notifypropertychanged事件,還是用到了再新增?這很有可能讓這個類遲遲不能封閉。

2. 需要用屬性把一些方法包裝起來,用來暴露給binding,造成冗餘和語義上的不美觀。

其實,wpf類庫里有乙個名為objectdataprovider的類就是專門為了解決這個矛盾的——有了這個類,你在設計自己的類的時候就不必總想著把它設計成資料來源的事兒了,該怎麼抽象就怎麼抽象、該怎麼封裝就怎麼封裝。

你可能會問:「如果這個類已經封閉了(不再改動)而我又需要拿它當資料來源了,碰巧所需要的資料是它某個方法的返回值,沒有對應屬性,怎麼辦?」ok,這就是objectdataprovider的用武之地了——使用它,可以在你這個類的例項外面加上一層「包裝」(或者說是加個殼兒),使它變成乙個標準的binding資料來源。如果沒記錯的話,這應該是著名的「介面卡模式」。

下面,我們用一段簡單的**來學習如何使用objectdataprovider。

這個例子簡單到不能再簡單——三個textbox,在前兩個裡輸入合適的數字,在第三個裡會顯示它們的和。按照ui與邏輯分開的原則,計算加法的功能應該由某個類來實現。

後台負責計算的類是這樣:

public

class calculator

public

string add(string arg1, string arg2)

else }

} 大家看到了,設計這個類的時候,涉及到加法運算的邏輯時,任何乙個程式設計師都會很自然地採用乙個方法來實現,而不會為了把它做成乙個binding的資料來源專門把這些方法封裝進屬性裡——這樣就破壞了物件導向的抽象。

然後,讓我們看看如何使用objectdataprovider來包裝這個類。

<

window

xmlns=""

xmlns:x=""

xmlns:system="clr-namespace:system;assembly=mscorlib"

title="add"

height="136"

width="230"

background="steelblue"

>

<

window.resources

>

<

objectdataprovider

x:key="odp"

objecttype=""

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=", path=methodparameters[0], bindsdirectlytosource=true, updatesourcetrigger=propertychanged}"

/>

<

textbox

x:name="textbox2"

margin="5"

text=", path=methodparameters[1], bindsdirectlytosource=true, updatesourcetrigger=propertychanged}"

/>

<

textbox

x:name="textbox3"

margin="5"

text=", mode=oneway}"

/>

stackpanel

>

window

>

WPF 列印例項

在wpf 中可以通過printdialog 類方便的實現應用程式列印功能,本文將使用乙個簡單例項進行演示。首先在vs中編輯乙個圖形 如下圖所示 將需要列印的內容放入同乙個中,並起名為 printarea 列印按鍵一般不是我們希望列印出來的內容,則將其放在外面。接下來編寫button click 事件...

入門 WPF資料繫結 例項

binding物件的屬性 property description converter 轉換器elementname 繫結的源物件 fallbackvalue 繫結無法返回有效值時的預設顯示。mode 繫結方式 path屬性 relativesource 常用於自身繫結或者資料模板中來指定繫結的源物...

wpf 多執行緒操作例項

由於wpf中有主線程和後台執行緒的區分所以不能直接使用執行緒進行主線程的操作 之前是使用func來進行執行緒操作的,因為func自帶這對主線程操作的方法,所以直接寫會方便很多 後來,要用到多執行緒的時候在使用func方法就會顯得有些麻煩,還是使用c 最經典的thread最好 private thre...