2013-11-19 7 views
2

Я хочу использовать класс ObservableCollection в Net 4.5 с помощью xaml.Как объявить пространство имен ObservableCollection в xaml

Это, как я указать пространство имен в XAML:

xmlns:coll="clr-namespace:System.Collections.ObjectModel;assembly=System" 

И декларации коллекции, как это:

<ic:MyControl.Resources> 
    <coll:ObservableCollection x:TypeArguments="commands:Command" x:Key="CommandCollection"/> 
</ic:MyControl.Resources> 

Я получаю эту ошибку компиляции:

The tag 'ObservableCollection' does not exist in XML namespace 'clr-namespace:System.Collections.ObjectModel;assembly=System'.

Я думаю, что имя сборки может быть неправильным, но поиск на форумах здесь сказал, что это сборка системы. Может ли кто-нибудь сказать мне, что происходит не так?

+0

Вы проверили http://stackoverflow.com/questions/2695847/wpf-xaml-create-an-observable-collectionobject-in-xaml-in-net-4-0? –

+0

Если вы объявляете это в элементе управления WPF, который будет скомпилирован в Baml, то вы застряли в спецификации языка Xaml2006, и вы не можете использовать 'x: TypeArguments' где угодно, но в корневом элементе. Xaml2009 позволяет использовать его в любом месте, но вы можете использовать Xaml2009 только для файлов Xaml, которые вы загружаете вручную во время выполнения. –

+0

Какой смысл хранить 'ObservableCollection ' в представлении, более того, в ресурсах представления? Что-то не так с вашим кодом. – Dennis

ответ

2

В разделе Примечания в ObservableCollection documentation on MSDN:

Notes on XAML Usage

ObservableCollection can be used as a XAML object element in Windows Presentation Foundation (WPF), in versions 3.0 and 3.5. However, the usage has substantial limitations.

...

A more straightforward way to use ObservableCollection capabilities from XAML in an application is to declare your own non-generic custom collection class that derives from ObservableCollection, and constrains it to a specific type. Then map the assembly that contains this class, and reference it as an object element in your XAML.

0

Я согласен с выше ответ. Тем не менее, вы можете пойти дальше этого и просто выставить свою коллекцию в качестве CollectionViewSource в ресурсе и привязать к ней, а затем создать свою коллекцию источников как ObservableCollection в вашей ViewModel. Подробности CollectionViewSource можно найти здесь.

CollectionViewSource

Смежные вопросы