你可以在XAML中绑定到一个类型为T的类吗?WPF XAML泛型类绑定
如果我有一个类myCLASS<T>
,并且我想将一个List<myClass<int>>
绑定到XAML,那么可以这样做吗?
或者你是否必须编写包装class newMyClass: myClass<int>
然后绑定XAML到newMyClass
?
谢谢。
你可以在XAML中绑定到一个类型为T的类吗?WPF XAML泛型类绑定
如果我有一个类myCLASS<T>
,并且我想将一个List<myClass<int>>
绑定到XAML,那么可以这样做吗?
或者你是否必须编写包装class newMyClass: myClass<int>
然后绑定XAML到newMyClass
?
谢谢。
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 },
};
}
,这是什么样子:
我们使用XAML在代码隐藏中创建了泛型类的实例,但绑定到该数据。
XAML 2009使用x:TypeArguments
支持它,但目前它不是一个舒适的选项,因为它不受Microsoft的XAML到BAML编译器的支持。对于XAML 2009,您必须自己使用XamlReader
来阅读XAML,但随后会丢失更多功能,如后面的代码。你现在最好按照你的建议做。
Christian Moser给出了在this link中使用TypeArguments来绑定到通用集合的演示