wpf繫結全域性靜態變數(mvvm)

2021-08-26 05:35:00 字數 956 閱讀 7096

在實際的開發中,有一些集合或者屬性可能是全域性的,比如當你做乙個oa的時候,可能需要展示所有的人員,這時這個所有的人員列表顯然可以作為全域性引數,比如這裡有乙個全域性的靜態屬性userlist。而你在使用mvvm做wpf開發的時候,一般每個view都已經指定好了viewmodel。而viewmodel顯然是不包含userlist。這時如果你想在繫結了viewmodel裡面繫結userlist給某個listbox該怎麼辦呢。首先你可以在你的viewmodel裡面定義乙個userlist指向全域性靜態變數的引用,就像下面這樣:

public observablecollectionuserlist

這是乙個方法,但這個方法會讓你的viewmodel變得臃腫。實際上wpf是支援靜態引數的繫結的,在xaml裡面這樣寫:

itemssource="}"

或者itemssource=""

這樣,當你的任何乙個模組,改變了userlist裡面的東西,所有前端用到這個列表的,都會收到屬性變更通知。

再比如,你要在某個件上繫結system.datetime.now,則這麼寫:

當然,要定義一下system:

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

事實上這種繫結是無意義的,因為now只是普通的屬性,並沒有實現屬性變更通知,因此你的textblock顯示的時間不過是第一次載入的時間。它並不會隨著時間的變化而變化。

這裡面,source的作用其實就是指定源,通常我們繫結,只需要設定path,比如path=name或者直接繫結某個屬性,比如text="",這樣系統會自動從你設定的datacontext裡面找name這個屬性。而如果你指定了source,系統便不會在你的datacontext裡面查詢,而是從指定的source裡面查詢。因此,假設你的globaldata裡面有乙個靜態實體(model),它裡面有乙個userlist,那麼你應該這麼寫:

itemssource="}"

區域性變數,區域性靜態變數,全域性變數,全域性靜態變數分別

c 記憶體到底分幾個區?一 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶,呵呵。3 全域性...

全域性變數,全域性靜態變數,區域性靜態變數,區域性變數

變數可以分為全域性變數 靜態全域性變數 靜態區域性變數和區域性變數。按照儲存區分 全域性變數 靜態全域性變數和靜態區域性變數都存放在記憶體的全域性資料區,區域性變數存放在記憶體的棧區。按作用域分 全域性變數在整個工程檔案內都有效 靜態全域性變數只在定義它的檔案內有效 靜態區域性變數只在定義它的函式內...

區域性變數,區域性靜態變數,全域性變數,全域性靜態變數分別

c 記憶體到底分幾個區?一 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶,呵呵。3 全域性...