gpt4 book ai didi

c# - MVVM light示例代码中DataItem的目的是什么?为什么要这样实现?

转载 作者:行者123 更新时间:2023-12-03 10:34:27 25 4
gpt4 key购买 nike

创建新的MVVM light(WPF451)项目时,得到了此示例代码,这让我感到困惑。

DataItem.cs:

public class DataItem
{
public string Title { get; private set; }

public DataItem(string title)
{
Title = title;
}
}

此类声明ViewModel中所需的一组属性。它在模型层DataService中使用,该模型在其构造函数中向VM提供数据。

DataService.cs
public class DataService : IDataService
{
public void GetData(Action<DataItem, Exception> callback)
{
// Use this to connect to the actual data service

var item = new DataItem("Welcome to MVVM Light");
callback(item, null);
}
}

我以为它也可以在VM中用于保存属性,如下所示:
public DataItem Data { get; set; }

但是,MVVM轻型开发人员决定在VM中重新声明属性。

MainViewModel.cs:
public class MainViewModel : ViewModelBase
{
private readonly IDataService _dataService;

private string _welcomeTitle = string.Empty;
public string WelcomeTitle
{
get{ return _welcomeTitle; }
set{ Set(ref _welcomeTitle, value); }
}

public MainViewModel(IDataService dataService)
{
_dataService = dataService;
_dataService.GetData(
(item, error) =>
{
WelcomeTitle = item.Title;
});
}
}

我不明白他们为什么要这样实现。是的,它减少了冗余INotifyPropertyChanged实现的对象,因此它使用较少的资源。但是,如果必须对VM实现大量的属性,则必须在VM和DataItem上都编写属性,并且当我要添加或删除属性时,必须对它们进行编辑。

我不能只在VM中保留DataItem属性吗?还是我错过了什么?

最佳答案

在这种情况下,DataItem仅表示Model。如果Model是无法修改的实体(数据库自动生成的POCO),则此方案将起作用。

是的,您必须在Model中具有每个适用的ViewModel属性,以便它可以RaisePropertyChanged,是的,这更多的是“工作”,但它提供了两者之间的抽象。

有些人可以修改Model以使其实现INotiftyPropertyChanged,而其他人则认为不应使用Model,所有工作都应在ViewModel中完成(在这种情况下,就是这样做的)。

关于c# - MVVM light示例代码中DataItem的目的是什么?为什么要这样实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38504490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com