什么是数据绑定/设置源到我的DataGrid [WPF]的正确方法

时间:2018-02-04 23:19:41

标签: c# mysql wpf xaml datagrid

我在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 Control上设置ItemsSource,就像这样(IN XAML PART):

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

但是我不知道这是如何工作的以及如何实现这一点因为我正在使用dataGridMyArticles.ItemsSource = articlesList;

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

并且它会IsAsync=True使数据绑定更快/打开窗口更快或者像那样吗?

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

谢谢你们 干杯

1 个答案:

答案 0 :(得分:2)

当您遵循Model-View-ViewModel(MVVM)设计模式时,将视图中的元素绑定到视图模型的source属性是很常见的做法。 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和绑定的使用。