我正在研究Bea Stollnitz在她的博客上提供的数据虚拟化解决方案。提供此解决方案以与. 我只是想让它与WPF一起工作,但我的尝试没有成功。ListView
DataGrid
这是她提供的完整工作示例的代码。
提供的ListView
代码中的 绑定到自定义AsyncVirtualizingCollection
集合class
。但是当我尝试将此集合绑定到DataGrid时,它确实显示空白行。数据不会出现在DataGrid
.
现在魔术发生在ControlTemplate
为ListViewItem
. 我已将其归零ContentPresenter
到ControlTemplate
. 已ContentPresenter
被替换Border
为ContentPresenter
. 以下是相同的XAML:
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<Border BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="{TemplateBinding BorderBrush}"
Background="{TemplateBinding Background}"
CornerRadius="2"
SnapsToDevicePixels="true">
<Border Name="InnerBorder" CornerRadius="1" BorderThickness="1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition MaxHeight="11"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Rectangle Name="UpperHighlight" Visibility="Collapsed" Fill="#75FFFFFF"/>
<GridViewRowPresenter Grid.RowSpan="2"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Data}"/>
<StackPanel Name="Loading" Orientation="Horizontal" Grid.RowSpan="2" Visibility="Collapsed">
<TextBlock Text="Loading item " />
<TextBlock Text="{Binding ItemNumber}" />
<TextBlock Text="..." />
</StackPanel>
</Grid>
</Border>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
现在,仔细观察第二个边框GridViewRowPresenter
的Grid
内部,您可能会注意到:Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Data}"
我认为这是有助于显示数据的行。
ControlTemplate
我尝试为以下内容创建一个DataGridCell
:
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridCell" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Border BorderThickness="{TemplateBinding Border.BorderThickness}"
BorderBrush="{TemplateBinding Border.BorderBrush}"
Background="{TemplateBinding Panel.Background}"
SnapsToDevicePixels="True">
<ContentPresenter Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Data}"
ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}"
ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}"
SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
但我仍然没有得到任何数据DataGrid
。
我不确定我在这里缺少什么,因为我不擅长模板和样式。
我试图保持尽可能精确,以避免让它太无聊。我您认为我错过了任何信息,请务必询问,我很乐意提供。
任何帮助将不胜感激。
注意:链接的应用程序面向 .Net 3.5,需要转换为 .Net 4.0 才能使用 DataGrid。