在MVVM中绑定ItemsControl的最佳实践

MuhKuh

使用MVVM模式时,将项目列表绑定到ItemsControl的最佳实践是什么?

1.绑定ViewModel列表

从数据库中加载项目,创建模型和所有视图模型,然后将视图模型列表绑定到ItemsControl.ItemsSource:

public class MyMainViewModel
{
    public List<PersonViewModel> Persons { get; set; }
}

2.绑定模型列表

从数据库加载项目,创建模型,然后将这些模型的列表直接绑定到ItemsControl.ItemsSource:

public class MyMainViewModel
{
    public List<Person> Persons { get; set; }
}
迈克·伊森

我认为这里的答案确实取决于情况

首先,您需要评估视图是否需要与模型进行交互,以使将视图模型包装在特定模型周围有意义的让我们看一个例子:

public class WebsiteModel
{
    public string URL { get; set; }
}

在这里,我有一个非常简单的模型,它代表一个网站,没有什么花哨的。我可以创建一个包含所有网站的视图模型,例如一对多关系:

public class WebsitesViewModel
{
    //A list of websites.
    public List<WebsiteModel> Websites { get; set; }

    //The command I will use to navigate, where the object parameter will be the WebsiteModel.
    public ICommand NavigateCommand { get; set; }

    ...

    public void Navigate(WebsiteModel model)
    {  
       ...
}

在这里,我希望我的视图能够使用浏览器导航到URL。我的视图模型包含一个模型列表,我的命令负责导航。

下一个我可以创建一个表示单个模型的视图模型的方法,我会说这是一种SOLID方法:

public class WebsiteViewModel
{
    //The website model
    public WebsiteModel Website { get; set; }

    //The command I will use to navigate, no parameters needed.
    public ICommand NavigateCommand { get; set; }

    ...

    public void Navigate()
    {  
       ...
}

在这种情况下,我将需要另一个视图模型,该模型将向WebsiteViewModel我的视图公开一个列表

public List<WebsiteViewModel> Websites { get; set; }

事实是,实际上没有最佳实践两种方法都没有真正胜过另一种。每种方法都有其优点,但是选择的方法实际上取决于实现方式。在这种情况下,我会说方法2过于复杂。但是,视图模型很快变得非常大的情况并不罕见,并且需要分开关注点将迫使您创建较小的类,甚至迫使视图模型将模型包装在其中,这使方法2成为可行的选择。

所以总结一下。两种方法都不是最佳实践

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MVVM ItemsControl 简单绑定

来自分类Dev

MVVM重用组件的最佳实践

来自分类Dev

WPF:在MVVM中创建与未知类型的绑定的最佳方法

来自分类Dev

数据绑定DataTemplate中的ItemsControl

来自分类Dev

数据绑定DataTemplate中的ItemsControl

来自分类Dev

在MVVM Light中独立更改模型时更新视图的最佳实践

来自分类Dev

在一个ViewModel中绑定多个ObservableArrays的Knockout.js最佳实践

来自分类Dev

Go中工会的最佳实践

来自分类Dev

AWS 中的 Ubuntu 最佳实践

来自分类Dev

MVVM WPF-ItemsControl内的ComboBox双向绑定

来自分类Dev

MVC 到 MVVM 与网络:架构方法/最佳实践

来自分类Dev

RxSwift 与 MVVM 声明输出变量/函数的最佳实践

来自分类Dev

如何在ItemsControl中绑定DataTemplate

来自分类Dev

在WPF中绑定包含WindowsFormHost项的ItemsControl

来自分类Dev

绑定XAML中ItemsControl之外的属性

来自分类Dev

如何在绑定的ItemsControl中更改ZIndex?

来自分类Dev

在WPF MVVM中绑定图像

来自分类Dev

MVVM WPF中的数据绑定

来自分类Dev

MVVM WPF中的数据绑定

来自分类Dev

MVC布局中的CSS命名最佳实践

来自分类Dev

Firebase中的最佳实践数据设计

来自分类Dev

在Java中返回通配符列表的最佳实践

来自分类Dev

在SailsJS中处理异常的最佳实践

来自分类常见问题

在React Hooks中处理常量的最佳实践

来自分类Dev

在成员函数中消除幻数的最佳实践

来自分类Dev

在多个容器中存储对象的最佳实践

来自分类Dev

在C#中优化内存的最佳实践

来自分类Dev

Shadow DOM最佳实践中的JavaScript

来自分类Dev

在AngularJS中创建CRUD服务的最佳实践