c# - 我可以使用 WCF 接口(interface)作为 MVVM 模型吗?

标签 c# wpf mvvm

我的 WPF 应用程序应该通过 WCF 从管道接收数据:
我是 MVVM 的新手,我不明白在哪里放一些东西。我很清楚 View 是什么,但不清楚 ViewModel 是什么,尤其是我的情况下的 Model 是什么(如果涉及 WCF)问题是:

  • 什么是模型?我需要特殊的类来代表模型吗?还是模型是 WCF 服务器应用程序?什么是有效的工作流 “WCF 服务器应用程序----命名管道-----> ViewModel <--数据绑定(bind)--> View ” “WCF 服务器应用程序----命名管道-----> 模型<--->ViewModel <--数据绑定(bind)--> View ”
  • 如何重构下面的代码?把所有这些初始化放在哪里? View 模型?到模型类(如果我需要的话),到特殊的“初始化”类?
    public MainWindow()
    {
    ChannelFactory<IManagementConsole> pipeFactory =
    new ChannelFactory<IManagementConsole>(
        new NetNamedPipeBinding(),
        new EndpointAddress(
            "net.pipe://localhost/PipeMBClientManagementConsole"));
    
        IManagementConsole pipeProxy =
          pipeFactory.CreateChannel();
    
        List<ConsoleData> datas = new List<ConsoleData>();
        foreach (StrategyDescriptor sd in pipeProxy.GetStrategies())
        {
            datas.Add(pipeProxy.GetData(sd.Id));
        }
        this.DataContext = datas;
    }
    

  • 我可以假设这是我的 MVVM 模型吗? :
    [ServiceContract]
    public interface IManagementConsole
    {
        [OperationContract]
        ConsoleData GetData(int strategyId);
    
        [OperationContract]
        List<StrategyDescriptor> GetStrategies();
    }
    

    最佳答案

    模型是描述来自后端数据源的数据的类。它们可以是来自源的实际类(如 EF 或 WCF 代理),也可以是简单的 DTO。这真的取决于你的喜好。

    ViewModel 是一个描述要在 View 中显示的数据的类。通常,但不一定,数据来自模型类。

    ViewModel 负责管理 Model 类:将它们的信息暴露给 View,并根据来自 View 的输入对它们做一些事情。话虽如此,我不希望在 ViewModel 中看到实际的通信工作。相反,我将通信抽象到另一个层(我称我的服务层,但在这种情况下可能会造成混淆)。

    本质上,我让 ViewModel 向与后端通信的服务层发出请求,以检索/创建模型对象,然后将这些对象返回给 ViewModel。如果服务调用是异步的但仍然可以完成,这会变得复杂。

    有关这方面的一个简单示例,请从 practicalmvvm.com 下载代码示例。 .

    关于c# - 我可以使用 WCF 接口(interface)作为 MVVM 模型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8187135/

    相关文章:

    c# - ImageSharp 在 Core 2.2 中的图像上绘制形状

    c# - 为什么我在这里收到 "' System.Windows.Forms.Control' 不包含 'Checked' ...”的定义?

    .net - 我应该如何访问 ViewModel 的底层实体/模型

    javascript - 如何使用 Knockout.js 在特定位置向 ObservableArray 添加/插入项目

    c# - 根据类型选择数据模板

    c# - 带有按钮的 ListView 中的 UWP/MVVM 数据绑定(bind)不起作用

    c# - 为什么我的 TimeSpan.Add() 不工作?

    c# - 修剪字符串,删除 c# 中的最后一个字符

    wpf - 数据绑定(bind) : Different triggers for different purposes

    WPF 数据触发器未按预期触发