这可能只是一些概念上的问题,但我似乎无法找到理想的解决方案。
我想创建一个Silverlight客户端应用程序,它使用WCF通过一些自编的Web服务来控制第三方应用程序。如果有多个Silverlight客户端,则应同步所有客户端,即应将来自一个客户端的参数更改传播到所有客户端。
我设置了一个非常简单的Silverlight GUI,它操纵传递给服务器的参数(类继承INotifyPropertyChanged):
public double Height
{
get { return frameworkElement.Height; }
set
{
if (frameworkElement.Height != value)
{
frameworkElement.Height = value;
OnPropertyChanged("Height", value);
}
}
}
OnPropertyChanged负责传输数据。 WCF服务(duplex net.tcp)维护所有客户端的列表,一旦收到数据包(带有参数更改描述的XElement),它就会将此数据包转发给所有客户端,但收到数据包的客户端。
客户端收到包,但现在我不确定,在内部设置属性的最佳方法是什么。如果我使用“Height”(见上文),将生成一条新的更改消息并发送给所有其他客户a.s.o。
也许我可以使用数据字段(frameworkElement.Height)本身或函数 - 但我不确定以后是否会出现数据绑定问题。另外,我不想简单地复制部分代码属性,以防止出现冗余代码的错误。
那你会推荐什么?
谢谢!
答案 0 :(得分:1)
这里的一个常见解决方案是使用布尔值来跟踪OnPropertyChanged中的当前状态。收到WCF数据包时可以设置为true,如果是,则不进行重新广播。然后在设置属性后将其设置为false。
当您正常设置属性时,您只需将其保留为false。这将使其在内部设置时正常广播,但在通过WCF调用设置时则不会。
此选项有效,但确实需要谨慎。由于你将这个逻辑放在一个单一的点上,所以要正确起来应该是相当简单的。