wcf - 防止 MVVM ServiceAgent 事件多次连接

标签 wcf events mvvm

开发与 WCF 服务通信的 Silverlight 应用程序。

MVVM -> 服务代理 -> WCF 服务

所以在我的 ViewModel 中我有:

ServiceAgent.SearchExternalPatients(Name, (s, e) => 
            { 
                ExternalPatients = e.Result;                    
            });

在我的服务代理中我有:

public void SearchExternalPatients(string name, EventHandler<SearchPatientExternalCompletedEventArgs> callback)
    {                          
        _proxy.SearchPatientExternalCompleted += callback;
        _proxy.SearchPatientExternalAsync(name);
    }

问题是每次我点击搜索按钮时,它都会再次连接事件,当我得到结果时,我收到了好几次。

在 MVVM ServiceAgent 模式中解除这些事件的最佳方式是什么?

最佳答案

这样做:

public void SearchExternalPatients(string name, EventHandler<SearchPatientExternalCompletedEventArgs> callback)
{
    EventHandler<SearchPatientExternalCompletedEventArgs> wrapper = null;
    wrapper = (s, e) =>
    {
        callback(s, e);
        _proxy.SearchPatientExternalCompleted -= wrapper;
    }                          
    _proxy.SearchPatientExternalCompleted += wrapper;
    _proxy.SearchPatientExternalAsync(name);
}

您可能会从编译器或 ReSharper 或 Visual Studio 的静态代码分析(取决于每个设置)收到警告,因为 lambda 正在访问在 lambda 外部修改的变量,但这应该可以正常工作。尽管我不明白您为什么首先要以这种方式分解代码。

关于wcf - 防止 MVVM ServiceAgent 事件多次连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5959677/

相关文章:

asp.net - 如何为 WCF 服务创建重定向?

WCF 以 4K block 传输!

javascript - 在 javascript 中滚动 DOM 元素之前(而不是之后!)触发的事件

wpf - 每个 View 一个 View 模型?

mvvm - EntityList/EntityCollection - MVVM 示例

c# - Master/Detail MVVM 中的 Wpf Combobox

c# - Visual Studio 生成的服务引用中的 XML 命名空间问题

asp.net-mvc - 是否可以从同一项目使用 WCF 服务?

java - 单击 jmenu 时调用 actionperformed 方法

jquery - pageinit 和 pageshow 之间的区别