2016-07-06 54 views
0

我的WPF應用程序有一個MainWindow.xaml,它包含若干DataGrid,它在MainWindow.xaml.cs中與ObservableCollection結合。單視圖中有幾個Datagrid好嗎?

例如,

public MainWindow() 
{ 
    var dg1 = new ObservableCollection<CustomClass1>(); 
    var dg2 = new ObservableCollection<CustomClass2>(); 
    var dg3 = new ObservableCollection<CustomerClass3>(); 
} 

問題是MainWindow.xaml是越來越長,因爲我保持它添加新DataGrid

我可以將每個DataGrid分開爲UserControlPage嗎? 或者您是否知道在WPF應用程序中處理多個DataGrid的更好的解決方案?

在此先感謝!

+0

閱讀關於數據網格的虛擬化。也許它在你的情況下被禁用。 https://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.enablerowvirtualization(v=vs.110).aspx – Mikolaytis

回答

1

是的。有可能的。 在我看來,最好在你的案例中遵循MVVM方法。希望你意識到這一點。 如果您不知道該方法,請了解它。

您可以創建3個不同的用戶控件,或者如果您覺得足夠了,那麼就足夠了。只需創建一個用戶控件併爲其創建相應的視圖模型。 在viewmodel中,您可以將視圖的datagrids的源綁定到屬性,從而降低複雜性,提高代碼的可維護性和可讀性。

你也不會覺得MainWindow變得越來越複雜。在我看來,讓MainWindow擁有幾行代碼。

+0

但我讀的stackoverflow答案,用戶控件不應該有自己的視圖模型?你怎麼看?這裏是鏈接:http://stackoverflow.com/a/28815689/4546953 – jkl

+1

你檢查了第一個答案,也被選爲正確答案?這是我的想法。隨你便。 **這不是一個是或不是的問題。這取決於是否有額外的視圖模型可以提供更好的可維護性或可測試性。添加視圖模型沒有任何意義。您需要測量開銷對您的特定用例是否值得。** – ViVi

+0

謝謝!由於第二個答案獲得了最多的選票,我認爲這是最正確的答案。感謝您的建議! – jkl

0

是的,你可以(也可能應該)將你的DataGrid分成單獨的UserControls。不要將您的集合保留在代碼隱藏中,請考慮實施Model-View-ViewModel pattern(MVVM)。確保將每個UserControl的DataContext設置爲相關View Model的實例。這將防止當前的.xaml/.xaml.cs文件變得過大,並且還有助於使組件更易於重用。

+0

但我讀的stackoverflow答案,用戶控件不應該有自己的看法模型?你怎麼看?這裏是鏈接:http://stackoverflow.com/a/28815689/4546953 – jkl

+0

如果您選擇將您的MainWindow.xaml分解到多個UserControl中,那並不一定意味着您也需要多個View Model。事實上,你可以有一個ViewModel充當你的所有3個UserControl的DataContext。我原來的意見是建議你在MVVM意義上創建一個View Model。當你提到你的xaml.cs文件變長時,我認爲這意味着你在代碼隱藏方面做了與View相關的邏輯,而不是正確的View Model。 –

相關問題