2012-04-01 82 views

回答

2

而不是绑定到集合和使用转换器,您可以公开只读的ItemNames属性。在Items.CollectionChanged事件处理您提出一个PropertyChanged事件的itemNames的财产

public class ViewModel 
{ 

     public ViewModel() 
     { 
      Items = new ObservableCollection<Item>(); 
      Items.CollectionChanged += (o, e) => NotifyPropertyChanged("ItemNames"); 
     } 
     public ObservableCollection<Item> Items { get; private set; } 
     public string ItemNames { get { return String.Join(",", Items); } } 
} 
+0

如果使用svcutil创建类,该怎么办?我会在客户端生成readonly吗?如果我从服务中接收数据,而不是在客户端生成数据,该怎么办?我会在哪里附加事件? – 2012-04-01 02:14:53

+0

另外正在更改的集合在另一个集合中嵌套。 – 2012-04-01 02:23:34

+0

我通过设置一个构造函数来接受它自己的类型作为参数,然后复制值并创建一个新的ObservableCollection并将NotifyPropertyChanged调用附加到指定的CollectionChanged事件上。该字符串已更新。我只使用这样的构造函数,因此可以安全地创建新的集合。我不确定这是否是最有效的方式,但它正在工作。非常感谢。 – 2012-04-01 05:55:03

2

是的,但通常你不会因为开销而想做那样的事情。如果您使用带有ItemsSource的控件,则他们知道如何处理CollectionChanged而无需重新创建所有内容。

+0

我结合在一个网格的DataColumn的性质和使用的IValueConverter到的ObservableCollection转换为逗号分隔字符串。我明确知道这不是过去的路,因为我无法过滤等。我知道这可以作为我的类中的只读属性如何通知从收集后只读字符串属性已更改已经改变? – 2012-04-01 00:13:30

+0

@ChristopherLeach:只需订阅CollectionChanged事件并为持有该字符串的属性触发PropertyChanged事件。 – 2012-04-01 00:29:39

+0

只有hickup是该类是从WCF服务生成的。我试图用只读字符串属性生成一个部分类客户端,并附加了CollectionChanged事件处理程序,但是这不会在整个服务中分散使用。我应该在一个新类中继承WCF类,并将事件链接到那里吗? – 2012-04-01 02:10:29

相关问题