1

这可能只是一些概念问题,但我似乎找不到理想的解决方案。

我想创建一个 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),它就会将此包转发给所有客户端,但接收包的客户端除外。

客户收到包裹,但现在我不确定,在内部设置属性的最佳方法是什么。如果我使用“高度”(见上文),则会生成新的更改消息并将其发送给所有其他客户端

也许我可以使用数据字段 (frameworkElement.Height) 本身或函数 - 但我不确定以后是否会出现数据绑定问题。此外,我不想简单地复制部分代码属性,以防止出现冗余代码的错误。

那么你会推荐什么?

谢谢!

4

1 回答 1

1

一种常见的解决方案是使用布尔值来跟踪 OnPropertyChanged 中的当前状态。可以在收到 WCF 数据包时设置为 true,如果为 true,则不重播。然后在设置属性后将其设置为 false。

当您正常设置属性时,您只需将其保留为假。这将导致它在内部设置时正常广播,但在通过 WCF 调用设置时不会。

此选项有效,但确实需要小心才能正确。由于您将此逻辑放在一个点中,因此正确应该相当简单。

于 2011-01-05T16:49:37.217 回答