2016-07-06 53 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。 –

相关问题