2011-06-09 304 views
1

你可以在XAML中绑定到一个类型为T的类吗?WPF XAML泛型类绑定

如果我有一个类myCLASS<T>,并且我想将一个List<myClass<int>>绑定到XAML,那么可以这样做吗?

或者你是否必须编写包装class newMyClass: myClass<int>然后绑定XAML到newMyClass

谢谢。

回答

1

WPF绑定子系统支持任何类型的对象,结构,类,泛型类,甚至动态对象。重要的是,实例有属性

您不能在典型的WPF应用程序的资源中创建泛型类,因为对象创建语法不支持它。尽管如此,在代码隐藏,视图模型或服务中创建的对象(即使它们是泛型类型或嵌套泛型类型的实例)仍然可以参与绑定。

下面是一个基于问题的例子。下面是一些XAML的一个窗口:

<Grid> 
    <ListBox ItemsSource="{Binding}" Padding="10"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding X}"/> 
        <TextBlock Text=" , "/> 
        <TextBlock Text="{Binding Y}"/> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</Grid> 

,这里是一个通用类,类似于一个Point类:

class myClass<T> 
{ 
    public T X { get; set; } 
    public T Y { get; set; } 
} 

,这里是一些代码隐藏,以支持XAML上面的结合:

void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    DataContext = new List<myClass<int>> 
    { 
     new myClass<int> { X = 1, Y = 2 }, 
     new myClass<int> { X = 3, Y = 4 }, 
    }; 
} 

,这是什么样子:

Generic Binding

我们使用XAML在代码隐藏中创建了泛型类的实例,但绑定到该数据

1

XAML 2009使用x:TypeArguments支持它,但目前它不是一个舒适的选项,因为它不受Microsoft的XAML到BAML编译器的支持。对于XAML 2009,您必须自己使用XamlReader来阅读XAML,但随后会丢失更多功能,如后面的代码。你现在最好按照你的建议做。

0

Christian Moser给出了在this link中使用TypeArguments来绑定到通用集合的演示