【问题标题】:Is having several Datagrid in single view ok?在单个视图中有多个 Datagrid 可以吗?
【发布时间】:2016-07-06 17:35:12
【问题描述】:

我的 WPF 应用程序有一个 MainWindow.xaml,它包含多个 DataGrid,它们绑定到 MainWindow.xaml.cs 中的 ObservableCollection

例如,

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

问题是MainWindow.xaml 越来越长,因为我不断在其中添加新的DataGrid

我可以将每个 DataGridUserControlPage 分开吗? 或者您知道在 WPF 应用程序中处理多个 DataGrid 的更好解决方案吗?

提前致谢!

【问题讨论】:

标签: c# wpf xaml mvvm datagrid


【解决方案1】:

是的。有可能的。 我认为,在您的情况下,最好遵循 MVVM 方法。希望您对此有所了解。 如果您不了解该方法,请了解它。

您可以创建 3 个不同的用户控件,或者如果您觉得一个就足够了,那么一个就足够了。只需创建一个用户控件并为此创建相应的视图模型。 在视图模型中,您可以将视图的数据网格源绑定到属性,从而降低复杂性,提高代码的可维护性和可读性。

您也不会感觉到 MainWindow 变得复杂。在我看来,让 MainWindow 有几行代码。

【讨论】:

  • 但是我读了stackoverflow的回答,用户控件不应该有自己的视图模型?你怎么看?这是链接:stackoverflow.com/a/28815689/4546953
  • 您是否检查了第一个也被选为正确答案的答案?这就是我的想法。由你决定。 这不是一个是或否的问题。这取决于是否拥有额外的视图模型可以为您提供更好的可维护性或可测试性。如果它没有为您带来任何好处,那么添加视图模型是没有意义的。您需要衡量开销对于您的特定用例是否值得。
  • 谢谢!由于第二个答案得到了最多的投票,我认为这是最“正确”的答案。谢谢你的建议!
【解决方案2】:

是的,您可以(并且可能应该)将您的 DataGrid 分成单独的 UserControl。与其将您的集合保存在代码隐藏中,不如考虑实现Model-View-ViewModel pattern (MVVM)。确保将每个 UserControl 的 DataContext 设置为相关视图模型的实例。这将防止您当前的 .xaml/.xaml.cs 文件变得过大,并且还有助于使您的组件更具可重用性。

【讨论】:

  • 但是我读了stackoverflow的回答,用户控件不应该有自己的视图模型?你怎么看?这是链接:stackoverflow.com/a/28815689/4546953
  • 如果您选择将 MainWindow.xaml 分解为多个 UserControl,这并不一定意味着您也需要多个视图模型。实际上,您可以拥有一个 ViewModel 作为所有 3 个 UserControl 的 DataContext。我最初的评论是建议您在 MVVM 意义上创建一个视图模型。当您提到您的 xaml.cs 文件变长时,我认为这意味着您在代码隐藏中执行与视图相关的逻辑,而不是正确的视图模型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多