gpt4 book ai didi

c# - 使用ViewModel公开嵌套模型

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

我正在寻找有关WPF/MVVM应用程序的一些指导。谷歌今天没有帮助我。

所以我有一个带有某些模型(域对象)的应用程序,这些模型具有其他模型作为属性。现在,我只是展平嵌套对象,并在包含对象的ViewModel中公开属性。

随着我的模型变得越来越复杂,我正在努力解决如何分解ViewModels的问题。我正在走向“复合 View ”,其中“包含”对象具有其View&ViewModel,而“嵌套”对象也具有其自己的。这也会给我一些可重用的代码,这将是一个加号。

举一个 super 简单的例子,假设我有一个建筑物,每个建筑物都具有一些属性,并带有如下所示的地址:

public class Building
{
public string Name { get; set;}
public Address Address { get; set;}
}

public class Address
{
public string Number { get; set; }
public string Street { get; set; }
}

然后,我有一个用于建筑物的ViewModel,以及一个用于地址的ViewModel(由BuildingViewModel公开):
public class BuildingViewModel
{
public string Name { get; set; } // from model
public AddressViewModel Address { get; set; } // a wrapped instance of Address
// INPC, etc...
}

public class AddressViewModel
{
public string Number { get; set; } // originally from Building
public string Street { get; set; }
// INPC, etc...
}

因此,没有显示,我有一个BuildingView和一个嵌套的AddressView。我只是先将ViewModel与datatemplates一起使用。

现在,如何使Address对象保持同步?一旦将它们分成两个ViewModel,就得到了Address对象的两个实例。在完成的所有搜索中,我已经看到使用来回传送对象的消息,并且提到了“观察者”模式。

我是朝着正确的方向前进,还是我错过了一些非常简单的事情?任何建议表示赞赏。

FWIW,由于对学习曲线持怀疑态度,所以我已经整理了自己的框架。另外,到目前为止,它还相当简单。

最佳答案

您可以使用地址类型的后端字段将地址存储在AddressViewModel中:

    public class AddressViewModel
{
private readonly Address _address;

public AddressViewModel(Address address)
{
_address = address;
}

public string Number
{
get { return _address.Number; }
set { _adress.Number = value; }
}
public string Street
{
get { return _address.Street; }
set { _adress.Street = value; }
}
}

我希望你可以用我的代码做一些事情:-)

编辑:

下次尝试:)

我认为解决问题的最佳方法是使用一些工厂类/方法来获取模型。例如,您有一个具有方法GetAddressList()的AddessList类。该方法返回地址模型对象的列表。在第一个调用之后,您将返回的对象缓存在AddressList类中,对于下一个调用,您将返回缓存的列表。
    public static class AddressList
{
private static List<Address> _backend;

private static AddressList()
{
_backend = new List<Address>();
}

public static List<Address> GetAddressList()
{
if(_backend.Count == 0)
{
//Here you can load your models from your data source
}
else
{
return _backend;
}
}
}

关于c# - 使用ViewModel公开嵌套模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11788854/

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