【问题标题】:What is proper way of data binding / setting source to my DataGrid [WPF]将数据绑定/设置源到我的 DataGrid [WPF] 的正确方法是什么
【发布时间】:2018-02-04 23:19:41
【问题描述】:

我是 wpf 的初学者,所以请耐心等待我:)

我在 MySql 数据库中存储了 40.000 篇文章,当我点击一个按钮时,我打开了一个加载这些文章的窗口,我就是这样做的:

/// <summary>
/// Interaction logic
/// </summary>
public partial class ArticlesAdd : Window
{ 
   public ObservableCollection<MyArticles> articlesList = ObservableCollection<MyArticles>(ArticlesController.SelectAll());

   public ArticlesAdd()
   {
      this.InitializeComponent();

      // Setting source to my DATAGRID when this window is loaded/opened

      dataGridMyArticles.ItemsSource = articlesList;
    }
}

但我看到一些示例是直接在 DataGrid 控件上设置 ItemsSource,如下所示(IN XAML PART):

<DataGrid Name="dataGridMyArticles" ItemsSource="{Binding Source=articlesList}"  AutoGenerateColumns="False">

但我不知道这是如何工作的以及应该如何实现,因为我使用的是dataGridMyArticles.ItemsSource = articlesList;

XAML 端的 ItemsSource="{Binding Source=articlesList}" 是否比我的绑定代码更快?

IsAsync=True 会让数据绑定更快/更快地打开窗口还是像那样?

那么如何在不使用代码的情况下将该列表绑定到我的DataGrid,并且这种方法是否比在我的Class 构造函数中设置DataGrid's 源更快..?

谢谢大家 干杯

【问题讨论】:

    标签: c# mysql wpf xaml datagrid


    【解决方案1】:

    当您遵循模型-视图-视图模型 (MVVM)设计模式时,将视图中的元素绑定到视图模型的源属性是常见的做法。 MVVM 与性能无关,但它是在开发基于 XAML 的 UI 应用程序时推荐使用的设计模式。

    它不会使您的应用程序更快,但如果您做得对,它将使应用程序更易于维护、测试和开发。您可以在 MSDN 上阅读更多关于使用 MVVM 模式实现应用程序的动机:https://msdn.microsoft.com/en-us/library/hh848246.aspx。如果您的 Google 或 Bing 可以在线获取更多资源。

    在您的特定示例中,您将定义一个包含文章列表的视图模型类:

    public class ArticlesViewModel
    {
        public ObservableCollection<MyArticles> ArticlesList { get; private set; }
    
        public ArticlesViewModel()
        {
            ArticlesList = ObservableCollection<MyArticles>(ArticlesController.SelectAll());
        }
    }
    

    将视图的DataContext设置为此类的一个实例:

    public partial class ArticlesAdd : Window
    {
        public ArticlesAdd()
        {
            this.InitializeComponent();
            DataContext = new ArticlesViewModel();
        }
    }
    

    然后您可以绑定到DataContext/view 模型的任何公共属性

    <DataGrid Name="dataGridMyArticles" ItemsSource="{Binding Source=ArticlesList}" AutoGenerateColumns="False">
    

    您可能还想在后台调用 ArticlesController.SelectAll() 方法,以防止 UI 在从数据库收集数据期间冻结,但这是另一个与 MVVM 没有直接关系的故事,并且绑定的使用。

    【讨论】:

    • 谢谢 Magnus 我的朋友 :)
    猜你喜欢
    • 2021-06-20
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    相关资源
    最近更新 更多