2011-05-20 33 views
3

是否可以將轉換器應用於xaml中的控件的數據源?WPF:將轉換器應用於ItemsSource

或者也許有另一種方式來做到這一點。

基本上我有一個自定義控件接受特定類型的對象。該對象與該控件緊密相連。我不想將這種類型轉換爲我的視圖模型。所以我想能夠綁定到常規的屬性,如列表,並讓它自動轉換爲我的對象由轉換器。

我試過這樣的事情。

ItemsSource="{Binding CurrentTables, Converter={x:Static cconverters:SpyFilterDataObjectConverter}}" 
+0

Dup? http://stackoverflow.com/q/7505524/1174169 – cod3monk3y 2014-07-22 00:26:30

回答

1

那麼,使用這種轉換器似乎不太好。基本上,轉換器只執行一次轉換操作,所以您不會收到任何更新。我使用了不同的方法 - 只需創建一些包含初始集合(它應該實現INotifyCollectionChanged)的包裝器和一些將您的初始對象轉換爲包裝策略的包裝策略。

+0

這將是偉大的..但我使用MVVM ..所以我的控制綁定到viewmodel上的依賴屬性。不知道如何在綁定的中間注入包裝,以便它對屬性的任何更改作出反應。 – 2011-05-21 17:10:11

+0

您不應該將此包裝傳遞給綁定,只需創建包裝的實例,將您的集合傳遞給此包裝和綁定你的財產的包裝。使用這種方法,包裝器將像黑盒一樣封裝所有轉換邏輯。明白了嗎? 順便說一句,你知道你的viewmodel可以實現INotifyPropertyChanged嗎?這意味着您可以從演示者層次結構中排除DependencyObject。 – madcyree 2011-05-23 14:36:46

+0

如果我使用代碼傳遞我的集合,那麼所有這些都很容易解決。我的困難源於我使用MVVM的事實,而我只是綁定到視圖模型上的屬性,這些屬性是標準的字符串/對象列表等。我想在每次列表更改時將這些對象無縫地轉換爲特定類型 – 2011-05-23 14:46:55

1

x:Static有語法namespace:Type.StaticMember,你應該實例化轉換器和揭露它作爲一個靜態屬性。

或者,您可以在App.xamlApplication.Resources中創建一個實例,然後您可以在整個應用程序中使用其密鑰將其引用爲靜態資源。