как использовать List <T>в xaml? - PullRequest
4 голосов
/ 22 августа 2011

Так что я почти уверен, что в части определения мне нужно включить что-то вроде:

xmlns:s="clr-namespace:System.Collections.Generic;assembly=?????" 

, но я просто не знаю, что поставить вместо ??? 's.

То, что я хочу сделать с кодом, это:

<UserControl.DataContext>
    <ObjectDataProvider 
          MethodName="CreateNodes"
          ObjectType="{x:Type local:TreeViewModel}" >
        <ObjectDataProvider.MethodParameters>
            <s:List<T>>
                  {Binding Nodes}
            </s:List<T>>
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>
</UserControl.DataContext>

Так что, когда я делаю вызов objectDataProvider, я могу передать список вызываемому методу(CreateNodes) ...

Как мне это сделать?

спасибо!

Редактировать - может быть исправление?

Я просто поместил это в метод, вместо передачи в списке, это просто переменная приложения ... Я не знаю, являются ли переменные приложения плохими, хотя

  List<TNode> existingNodes;

  if (Application.Current.Properties.Contains("ExistingNodes")) existingNodes = Application.Current.Properties["ExistingNodes"] as List<TNode>;
  else existingNodes = new List<TNode>();

1 Ответ

5 голосов
/ 22 августа 2011

assembly часть объявления пространства имен XML будет mscorlib.

Но в любом случае, XAML не поддерживает генерики (*), поэтому вы не можете это сделать. Вместо этого вы можете создать класс, который наследует List<T>, и использовать его в XAML:

class ListOfFoo : List<Foo>
{
}

(1) На самом деле генерики поддерживаются в XAML 2009, но большая часть XAML 2009 не поддерживается в скомпилированном XAML . См. этот вопрос для получения дополнительной информации.

...