开发与 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/