2012-04-01 107 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

相關問題