样品申请:
提供的代码所属的示例应用程序Vehicle通过Binding 显示对象列表.本Vehicle类是顶层类子类可以从如派生Car和Bike.此时的示例应用程序显示所有者的名称Vehicle.
示例型号代码:
public class Vehicle
{
private string _ownerName;
public string ownerName
{
get { return _ownerName; }
set { _ownerName = value; }
}
}
public class Car : Vehicle
{
public int doors;
}
public class Bike : Vehicle
{
// <insert variables unique to a bike, ( I could not think of any...)>
}
Run Code Online (Sandbox Code Playgroud)
UserControl XAML代码:
<Grid>
<Grid.Resources>
<DataTemplate x:Key="itemTemplate">
<WrapPanel>
<TextBlock Text="{Binding Path=ownerName}"/>
</WrapPanel>
</DataTemplate>
</Grid.Resources>
<ListBox x:Name="list" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5" ItemsSource="{Binding}" ItemTemplate="{StaticResource itemTemplate}" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
UserControl代码背后:
public List<Vehicle> vehicleList = new List<Vehicle>();
public CustomControl()
{
InitializeComponent();
createSomeVehicles();
list.DataContext = vehicleList;
}
public void createSomeVehicles()
{
Car newcar = new Car();
newcar.doors = 5;
newcar.ownerName = "mike";
Bike newbike = new Bike();
newbike.ownerName = "dave";
vehicleList.Add(newcar);
vehicleList.Add(newbike);
}
Run Code Online (Sandbox Code Playgroud)
我希望能做什么:
我希望能够根据对象的类型在列表对象中显示一个按钮Vehicle.例如,我想Open Boot在列表项中显示一个按钮Car; 类型Bike没有启动,因此列表项中不会显示任何按钮.
想法如何实现这一目标:
我根据它的对象类型研究了不同DataTemplates的自定义绑定.例如,我可以调用后面的代码:
object.Template = (ControlTemplate)control.Resources["templateForCar"];
这里的问题是我在整个列表中使用Binding,因此没有办法手动将DataTemplate绑定到每个列表项,列表绑定控制它的项的DataTemplate.
您可以为每个Bike和Car(以及任何CLR类型)创建DataTemplate.通过指定DataTemplate's DataType属性,只要WPF看到该类型,就会自动应用该模板.
<Grid>
<Grid.Resources>
<DataTemplate DataType="{x:Type local:Car}">
<WrapPanel>
<TextBlock Text="{Binding Path=ownerName}"/>
<Button Content="Open Boot" ... />
</WrapPanel>
</DataTemplate>
<DataTemplate DataType="{x:Type local:Bike}">
<WrapPanel>
<TextBlock Text="{Binding Path=ownerName}"/>
</WrapPanel>
</DataTemplate>
</Grid.Resources>
<ListBox x:Name="list" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5" ItemsSource="{Binding}" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2144 次 |
| 最近记录: |