gpt4 book ai didi

c# - WPF 中的 MVVM 模式 - 如何处理我无法控制的模型?

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

过去几天我一直在深入研究 WPF,来自 WinForms 背景,我只是喜欢灵 active ,尤其是在绑定(bind)方面。

但是,在阅读了以下关于 MVVM 的文章后,我有一个问题:http://blog.alner.net/archive/2010/02/09/mvvm-to-wrap-or-not-to-wrap.aspx

如何处理我无法控制的模型,我无法为其添加接口(interface)等等,我只能按原样使用它们?

看这篇文章,我的一个选择是直接在我的 ViewModel 中公开模型,但这会是一个好方法吗?我也可以使用包装选项,但是如果它们没有 INotifyPropertyChanged 接口(interface),我如何将这些气泡的更改冒泡回 ViewModel?是否有任何其他选项允许对这些模型进行双向绑定(bind)?

编辑:
将以下类视为我无法修改的模型,我的选择是什么:

[DataContract]
public class NPCTypeData
{
[DataMember]
public string Name;

[DataMember]
public List<NameAlias> Emotions;
}

[DataContract]
public class NameAlias
{
[DataMember]
public string Name;

[DataMember]
public string Alias;
}

我并不真正关心将这些转换为可绑定(bind)类所需的代码,我只想要一个或多个示例,说明从哪里开始像这样的嵌套依赖项。

我是否将所有数据复制到具有可绑定(bind)属性的模型中,然后将它们留作序列化,我是否将它们包装起来,还是什么?

最佳答案

我同意 Henk 的观点,并补充说一个选项可以是 Entity Framework 所做的“动态代理类创建”。基本上:你有你的 POCO 对象,Entity 框架可以动态附加必要的功能来跟踪模型的变化。

还有一个从类继承的选项,并使用 AOP 属性装饰类,该属性会即时生成所有必要的管道。

你可以谷歌搜索:

  • AOP INotifyPropertyChanged - http://www.postsharp.net/
  • Automatic INotifyPropertyChanged using Dynamic Proxy - http://jonas.follesoe.no/2009/12/23/automatic-inotifypropertychanged-using-dynamic-proxy/

  • 当我遇到这样的问题时,我基本上使用 Henk 解决方案,使用 AutoMapper 创建新类并包装每个属性。它有效吗?它是可维护的吗?是的,它起作用了,而且它是可维护的。痛吗? .
    public class NPCTypeDataViewModel
    {
    public string Name {
    get;
    set;
    }

    public List<NameAliasViewModel> Emotions {
    get;
    set;
    }

    public NPCTypeDataViewModel(NPCTypeData data){
    Name = data.Name;
    Emotions = data.Emotions.Select(x => new NameAliasViewModel(x))
    .ToList();
    }

    public NPCTypeData GetModel(){
    var ntd = new NPCTypeData(){
    Name = Name,
    Emotions = Emotions.Select(emo => emo.GetModel())
    .ToList()
    };

    return ntd;
    }
    }

    public class NameAliasViewModel
    {
    public string Name {
    get;
    set;
    }

    public string Alias {
    get;
    set;
    }

    public NameAliasViewModel(NameAlias alias){
    Name = alias.Name;
    Alias = alias.Alias;
    }

    public NameAlias GetModel(){
    return new NameAlias(){
    Name = Name,
    Alias = Alias
    };
    }
    }

    关于c# - WPF 中的 MVVM 模式 - 如何处理我无法控制的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26463888/

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