如何在xaml中使用List <t>?</t>

时间:2011-08-22 18:58:31

标签: c# wpf xaml objectdataprovider

所以我很确定在定义部分我需要包含以下内容:

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

但我只是不知道该替代????。

我想用代码做的是:

<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)......

我该怎么做?

谢谢!

编辑 - 可以修复吗?

我只是把它放在方法中,而不是传入列表,它只是一个app变量......我不知道app变量是不是很糟糕

  List<TNode> existingNodes;

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

2 个答案:

答案 0 :(得分:5)

XML名称空间声明的assembly部分为mscorlib

但无论如何,XAML不支持泛型(*),所以你不能这样做。相反,您可以创建一个继承List<T>并在XAML中使用它的类:

class ListOfFoo : List<Foo>
{
}

(1)在XAML 2009中实际上支持 ,但在编译的XAML 中不支持大多数XAML 2009。有关详细信息,请参阅this question

答案 1 :(得分:-2)

就我而言,这没问题。 如果您像这样定义 List 属性:

    internal static readonly BindableProperty TestListProperty = BindableProperty.Create("TestList", typeof(List<string>), typeof(View), null, propertyChanged: (bindable, oldValue, newValue) =>
    {
        var view = (View)bindable;
        List<string> v = (List<string>)newValue;
        view.testList = v;
    },
    defaultValueCreator: (bindable) =>
    {
        var view = (View)bindable;
        return view.testList;
    });
    private List<string> testList;
    public List<string> TestList
    {
        get
        {
            return (List<string>)GetValue(TestListProperty);
        }
        set
        {
            SetValue(TestListProperty, value);
        }
    }

然后在 XAML 中使用它:

xmlns:s="clr-namespace:System.Collections.Generic;assembly=netstandard"
...
<View>
    <View.TestList>
        <s:List x:TypeArguments="x:String" >
           <x:String>abc</x:String>
           <x:String>123</x:String>
           <x:String>456</x:String>
        </s:List>
    </View.TestList>
</View>
...