我在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
源更快。?
谢谢你们 干杯
答案 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和绑定的使用。