2017-04-22 54 views
0

我是WPF的新手,但我在C#上工作了一段時間。也許像我這樣的類似問題已經在某個地方得到了答案,但我真的不知道該用什麼搜索詞。如何結合ViewModel和靜態對象

因此,在我的窗口中,我使用OxyPlot庫中的圖形。它的ItemsSource綁定到ViewModel中的ObservableCollection<DataPoint>

如果我希望DataPoint列表在整個應用程序中可用,該怎麼辦?

是否有意義在這種情況下,以創建這樣一個類:在視圖模型

public class Global 
{ 
    public ObservableCollection<DataPoint> DataPoints { get; set; } = new ObservableCollection<DataPoint>(); 
} 

,並指向它:

using static MyProject.Global; 
public class MainViewModel 
{ 
public ObservableCollection<DataPoint> MyPoints { get => DataPoints; } 
} 

還是更不要把這個列表分成ViewModel並直接綁定到Global.DataPoints?

無論如何,創建一個項目範圍的靜態類還是以不同的方式通過應用程序共享對象是一種好方法?

感謝您的回答。

+0

這是一個合理的問題,我不知道爲什麼人們對SO吃自己的。 – OmegaMan

回答

1

請記住,MVVM只是一個將數據表示與業務邏輯與可視化表示分開的系統。其他組件訪問數據的方式不一定相關。

我會把這個集合放在虛擬機上。然後在應用程序類中實例化VM,並將其分配給該類上的靜態成員屬性。然後,您可以通過應用程序類的靜態代碼訪問其他代碼段。


作爲一方不需要ObservableCollection使綁定工作。可以使用通用列表並綁定到它(在VM上使用INotifyPropertyChanged)。當項目動態地添加到集合中或從集合中移除時,只需要ObservableCollection,並且想要處理該特定事件。

我有我的博客上這樣一個例子:

Xaml: ViewModel Main Page Instantiation and Loading Strategy for Easier Binding