我正在使用MVVM模式绑定到Entity Framework的WPF应用程序。 我有一个包含GridView的ListView。
<ListView Grid.Column="0" Grid.Row="1" ItemsSource="{Binding DocumentTypeCount.DocumentTypeCountList}" Width="Auto" Margin="5, 0,0,5" Focusable="False">
<ListView.View>
<GridView AllowsColumnReorder="False">
<GridView.ColumnHeaderContainerStyle>
<Style>
<Setter Property="FrameworkElement.Visibility" Value="Collapsed" />
</Style>
</GridView.ColumnHeaderContainerStyle>
<GridViewColumn Header="Document Type" Width="Auto" DisplayMemberBinding="{Binding DocumentTypeName}"/>
<GridViewColumn Header="Count" Width="Auto" DisplayMemberBinding="{Binding Count}"/>
</GridView>
</ListView.View>
</ListView>
这样渲染:
我的问题是: 1-如何禁用对行的关注?我已尝试使用ListViewItem上的属性Focusable,但它没有工作。 2-如何将不同的字体样式(粗体)应用于最后一项?
谢谢
答案 0 :(得分:2)
在我看来,你想要摆脱选择,如果是这种情况你应该使用ItemsControl
控制而不是ListView
,并使它看起来像ListView
列你可以使用共享大小范围Grid
作为ItemTemplate
<ItemsControl
ItemsSource="{Binding DocumentTypeCount.DocumentTypeCountList}"
Grid.IsSharedSizeScope="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="FontWeight" Value="Normal"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsTotals}" Value="True">
<Setter Property="FontWeight" Value="Bold"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="column1"/>
<ColumnDefinition SharedSizeGroup="column2"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding DocumentTypeName}" Grid.Column="0"/>
<TextBlock Text="{Binding Count}" Grid.Column="1"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
至于将最后一个元素显示为粗体,如果要将除DocumentTypeName
和Count
之外的另一个bool列添加到每个项目后面的模型中,那么就更容易了,让我们说{{1} },如果为true,则会通过IsTotals
使文本变为粗体,如上例所示。如果您无法添加其他列,但 Total 是一个唯一名称,您可以在该
DataTrigger
答案 1 :(得分:0)
尝试以下内容:
<ListBox
Width="Auto"
Grid.Column="0"
Grid.Row="1"
Margin="5, 0,0,5"
Focusable="False"
Grid.IsSharedSizeScope="True"
ItemsSource="{Binding Path=DocumentTypeCount.DocumentTypeCountList}">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<ContentPresenter/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.Resources>
<DataTemplate DataType="{x:Type DocumentTypes:DocumentType}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="CountColumn"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding DocumentTypeName}"/>
<TextBlock Grid.Column="1" Text="{Binding Count}"/>
</Grid>
</DataTemplate>
<DataTemplate DataType="{x:Type DocumentTypes:TotalsDocumentType}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="CountColumn"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock FontWeight="Bold" Text="{Binding DocumentTypeName}"/>
<TextBlock Grid.Column="1" FontWeight="Bold" Text="{Binding Count}"/>
</Grid>
</DataTemplate>
</ListBox.Resources>
</ListBox>
需要注意的关键事项是ItemContainerStyle。这将删除您不想要的突出显示行为。
其次,我决定使用带有SharedSizeScope的列表框。 Grid.IsSharedSizeScope =&#34; True&#34;列表框上的属性,加上SharedSizeGroup =&#34; CountColumn&#34;,使计数显示为在一列中。
此外,为了只显示粗体的最后一行,我建议使用不同类型的ViewModel。在这里,您可以看到我已经定义了&#34; DocumentType&#34;的通用行。视图模型。对于总计,一个&#34; TotalsDocumentType&#34;查看模型。这使我能够为最后一个项目提供不同的数据模板(这也可以通过StyleSelector完成)。 DocumentType和TotalsDocumentType共享一个公共基类,因此可以包含在同一个ObservableCollection中。这些不同类型的视图模型还允许您以不同的方式处理行,以用于我认为您需要的特定业务逻辑。