【发布时间】:2012-10-01 15:16:32
【问题描述】:
如果服务器端的集合已更改(通过客户端操作或服务器操作),我从几天以来一直在尝试将 PropertyChanged 事件从我的 wcf 服务获取到 wcf 客户端。 必须有更好的解决方案,而不是使用回调并重新加载列表......或者?
在服务器端:(几乎就像另一个帖子中的示例) ObservableCollection and CollectionChanged event as WCF datacontract
public interface IObservableService
{
[OperationContract(IsOneWay = false)]
Data getData();
}
[DataContract]
public class Data : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void Notify(string propertyName)
{
if (this.PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
Console.WriteLine("Notify()");
}
}
private ObservableCollection<string> list;
internal Data()
{
list = new ObservableCollection<string>();
list.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(list_CollectionChanged);
}
void list_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
Console.WriteLine("list_CollectionChanged");
Notify("DataList");
Notify("Data");
}
[DataMember]
public ObservableCollection<string> DataList
{
get
{
return list;
}
set {
list = value;
Console.WriteLine("set DataList");
Notify("DataList");
Notify("Data");
}
}
}
在客户端:
ObservableServiceClient client = new ObservableServiceClient();
Data data = client.getData();
到目前为止它的工作...我可以在客户端查询集合,但是当服务器集合发生更改时我没有收到“propertyChanged”?
怎么了?我的错误和误解在哪里?
【问题讨论】:
-
我想
ObservableCollection不会自动通过 WCF 发送信息来通知更新。我建议您使用双工合同类型并调用回调方法与客户端进行通信。更多信息在这里:msdn.microsoft.com/en-us/library/ms731064.aspx。如果您需要代码方面的帮助,请告诉我。
标签: c# wcf observablecollection propertychanged