作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些 ListView
绑定(bind)到 ViewModel 中的集合。这些集合中的项目类型是相同的(我们称它们为 TypeA
),这是一个公开多个简单类型属性的类。我想在 GridView
中显示它们里面ListView
.当然,我想定义一个 DataTemplate
为此TypeA
这样我就不必为每个 ListView
复制相同的 XAML的。到目前为止,我发现的所有示例都定义了 ItemTemplate
里面ListView
.如何制作资源并让不同的ListView
是指这个单一的资源?
更新:
我发布了我的 XAML 代码以进行更好的说明。我的原始 XAML 代码(简化)如下所示:
<ListView ItemsSource="{Binding MYCOLLECTION}" SelectionMode="Extended" >
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Prop1}" >
<GridViewColumn.Header>
<Border >
<TextBlock Text="Prop1" />
</Border>
</GridViewColumn.Header>
</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Prop2}" >
<GridViewColumn.Header>
<Border >
<TextBlock Text="Prop2" />
</Border>
</GridViewColumn.Header>
</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Prop3}" >
<GridViewColumn.Header>
<Border >
<TextBlock Text="Prop3" />
</Border>
</GridViewColumn.Header>
</GridViewColumn>
...
</GridView>
</ListView.View>
</ListView>
GridView
中以相同的方式显示相同类型的不同选择。 's(因为我们希望列标题显示属性的名称,所以我们使用
GridView
)。
DataTemplate
对于我的类型并将其用作
ItemTemplate
在
ListView
.
最佳答案
您甚至不必定义资源键,只需设置 DataType,因为它将在 WPF 内部用作键。只要确保您的数据模板在您想要使用它的任何控件中都是可见的,它们将被自动应用。 (例如,您可以在 App.xaml 的资源中的应用程序级别定义它们,但您可能有单独的资源字典):
<Application x:Class="WpfTest.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dataModel="clr-namespace:DataModel"
StartupUri="MainWindow.xaml">
<Application.Resources>
<DataTemplate DataType="{x:Type dataModel:GreekGod}">
<TextBlock Text="{Binding Path=Name}" Foreground="Gold"/>
</DataTemplate>
</Application.Resources>
</Application>
<GridViewColumn CellTemplate="{StaticResource prop1Template}">
<GridViewColumn.Header>
<Border >
<TextBlock Text="Prop1" />
</Border>
</GridViewColumn.Header>
</GridViewColumn>
...
<Application.Resources>
<DataTemplate x:Key="prop1Template">
<TextBlock Text="{Binding Prop1}" Foreground="Red"/>
</DataTemplate>
</Application.Resources>
<GridView
ColumnHeaderTemplate="{StaticResource myHeaderTemplate}"
ColumnHeaderContainerStyle="{StaticResource myHeaderStyle}"
>
<GridViewColumn Header="Prop1" CellTemplate="{StaticResource prop1Template}"/>
...
<Style x:Key="myHeaderStyle" TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="Background" Value="LightBlue"/>
</Style>
<DataTemplate x:Key="myHeaderTemplate">
<DockPanel>
<CheckBox/>
<TextBlock FontSize="16" Foreground="DarkBlue">
<TextBlock.Text>
<Binding/>
</TextBlock.Text>
</TextBlock>
</DockPanel>
</DataTemplate>
关于wpf - 如何为 GridView(在 ListView 内)定义 ItemTemplate,以便它可以在多个不同的 ListView 中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18891036/
我是一名优秀的程序员,十分优秀!