C# DataGrid中不存在数据时显示的默认类名
我是WPF的新手。以下代码段具有DataGrid的样式/设置C# DataGrid中不存在数据时显示的默认类名,c#,wpf,xaml,C#,Wpf,Xaml,我是WPF的新手。以下代码段具有DataGrid的样式/设置 <!--Global View Model Locator--> <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" /> <!-- Main menu style --> <Style x:Key="MainMe
<!--Global View Model Locator-->
<vm:ViewModelLocator x:Key="Locator"
d:IsDataSource="True" />
<!-- Main menu style -->
<Style x:Key="MainMenu" TargetType="{x:Type MenuItem}">
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontSize" Value="14"/>
</Style>
<!-- Data grid cell style -->
<Style x:Key="CenterCellStyle" TargetType="DataGridCell">
<Style.Setters>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style.Setters>
</Style>
<!-- DataGridColumnHeader style -->
<Style x:Key="ColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Grid>
<dg:DataGridHeaderBorder x:Name="HeaderBorder" BorderThickness="0"
Padding="0" SeparatorVisibility="Hidden">
<Border BorderThickness="0">
<TextBlock Text="{Binding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
</Border>
</dg:DataGridHeaderBorder>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- CENTER aligned DataGridColumnHeader style -->
<Style x:Key="CenterColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"
BasedOn="{StaticResource ColumnHeaderStyle}">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
<!-- RIGHT aligned DataGridColumnHeader style -->
<Style x:Key="RightColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"
BasedOn="{StaticResource ColumnHeaderStyle}">
<Setter Property="HorizontalContentAlignment" Value="Right"/>
</Style>
<!-- Consensus DataGrid -->
<Style x:Key="ConsensusDataGridStyle" TargetType="{x:Type DataGrid}">
<Style.Setters>
<Setter Property="ColumnHeaderStyle" Value="{StaticResource CenterColumnHeaderStyle}"/>
</Style.Setters>
</Style>
<!-- Validation Error Template -->
<DataTemplate DataType="{x:Type ValidationError}">
<TextBlock FontStyle="Italic" Foreground="Red"
HorizontalAlignment="Left" Margin="5,5" Text="{Binding Path=ErrorContent}"/>
</DataTemplate>
</ResourceDictionary>
</Application.Resources>
<!--Global View Model Locator-->
<vm:ViewModelLocator x:Key="Locator"
d:IsDataSource="True" />
<!-- Main menu style -->
<Style x:Key="MainMenu" TargetType="{x:Type MenuItem}">
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontSize" Value="14"/>
</Style>
<!-- Data grid cell style -->
<Style x:Key="CenterCellStyle" TargetType="DataGridCell">
<Style.Setters>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style.Setters>
</Style>
<!-- DataGridColumnHeader style -->
<Style x:Key="ColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Grid>
<dg:DataGridHeaderBorder x:Name="HeaderBorder" BorderThickness="0"
Padding="0" SeparatorVisibility="Hidden">
<Border BorderThickness="0">
<TextBlock Text="{Binding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
</Border>
</dg:DataGridHeaderBorder>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- CENTER aligned DataGridColumnHeader style -->
<Style x:Key="CenterColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"
BasedOn="{StaticResource ColumnHeaderStyle}">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
<!-- RIGHT aligned DataGridColumnHeader style -->
<Style x:Key="RightColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"
BasedOn="{StaticResource ColumnHeaderStyle}">
<Setter Property="HorizontalContentAlignment" Value="Right"/>
</Style>
<!-- Consensus DataGrid -->
<Style x:Key="ConsensusDataGridStyle" TargetType="{x:Type DataGrid}">
<Style.Setters>
<Setter Property="ColumnHeaderStyle" Value="{StaticResource CenterColumnHeaderStyle}"/>
</Style.Setters>
</Style>
<!-- Validation Error Template -->
<DataTemplate DataType="{x:Type ValidationError}">
<TextBlock FontStyle="Italic" Foreground="Red"
HorizontalAlignment="Left" Margin="5,5" Text="{Binding Path=ErrorContent}"/>
</DataTemplate>
</ResourceDictionary>
</Application.Resources>
<!--Global View Model Locator-->
<vm:ViewModelLocator x:Key="Locator"
d:IsDataSource="True" />
<!-- Main menu style -->
<Style x:Key="MainMenu" TargetType="{x:Type MenuItem}">
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontSize" Value="14"/>
</Style>
<!-- Data grid cell style -->
<Style x:Key="CenterCellStyle" TargetType="DataGridCell">
<Style.Setters>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style.Setters>
</Style>
<!-- DataGridColumnHeader style -->
<Style x:Key="ColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Grid>
<dg:DataGridHeaderBorder x:Name="HeaderBorder" BorderThickness="0"
Padding="0" SeparatorVisibility="Hidden">
<Border BorderThickness="0">
<TextBlock Text="{Binding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
</Border>
</dg:DataGridHeaderBorder>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- CENTER aligned DataGridColumnHeader style -->
<Style x:Key="CenterColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"
BasedOn="{StaticResource ColumnHeaderStyle}">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
<!-- RIGHT aligned DataGridColumnHeader style -->
<Style x:Key="RightColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"
BasedOn="{StaticResource ColumnHeaderStyle}">
<Setter Property="HorizontalContentAlignment" Value="Right"/>
</Style>
<!-- Consensus DataGrid -->
<Style x:Key="ConsensusDataGridStyle" TargetType="{x:Type DataGrid}">
<Style.Setters>
<Setter Property="ColumnHeaderStyle" Value="{StaticResource CenterColumnHeaderStyle}"/>
</Style.Setters>
</Style>
<!-- Validation Error Template -->
<DataTemplate DataType="{x:Type ValidationError}">
<TextBlock FontStyle="Italic" Foreground="Red"
HorizontalAlignment="Left" Margin="5,5" Text="{Binding Path=ErrorContent}"/>
</DataTemplate>
</ResourceDictionary>
</Application.Resources>
相应的XAML:
<!--Global View Model Locator-->
<vm:ViewModelLocator x:Key="Locator"
d:IsDataSource="True" />
<!-- Main menu style -->
<Style x:Key="MainMenu" TargetType="{x:Type MenuItem}">
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontSize" Value="14"/>
</Style>
<!-- Data grid cell style -->
<Style x:Key="CenterCellStyle" TargetType="DataGridCell">
<Style.Setters>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style.Setters>
</Style>
<!-- DataGridColumnHeader style -->
<Style x:Key="ColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Grid>
<dg:DataGridHeaderBorder x:Name="HeaderBorder" BorderThickness="0"
Padding="0" SeparatorVisibility="Hidden">
<Border BorderThickness="0">
<TextBlock Text="{Binding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
</Border>
</dg:DataGridHeaderBorder>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- CENTER aligned DataGridColumnHeader style -->
<Style x:Key="CenterColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"
BasedOn="{StaticResource ColumnHeaderStyle}">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
<!-- RIGHT aligned DataGridColumnHeader style -->
<Style x:Key="RightColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"
BasedOn="{StaticResource ColumnHeaderStyle}">
<Setter Property="HorizontalContentAlignment" Value="Right"/>
</Style>
<!-- Consensus DataGrid -->
<Style x:Key="ConsensusDataGridStyle" TargetType="{x:Type DataGrid}">
<Style.Setters>
<Setter Property="ColumnHeaderStyle" Value="{StaticResource CenterColumnHeaderStyle}"/>
</Style.Setters>
</Style>
<!-- Validation Error Template -->
<DataTemplate DataType="{x:Type ValidationError}">
<TextBlock FontStyle="Italic" Foreground="Red"
HorizontalAlignment="Left" Margin="5,5" Text="{Binding Path=ErrorContent}"/>
</DataTemplate>
</ResourceDictionary>
</Application.Resources>
<UserControl x:Class="Viewer.Views.ConsensusReadControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<DataGrid x:Name="dtGridReads" AutoGenerateColumns="False"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode ="Standard"
EnableColumnVirtualization="True"
EnableRowVirtualization="True"
ScrollViewer.IsDeferredScrollingEnabled="True"
CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserSortColumns="True"
ItemsSource ="{Binding}" Block.TextAlignment="Center"
AlternatingRowBackground="LightGoldenrodYellow" RowBackground="White"
CanUserAddRows="False" CanUserDeleteRows="False" FrozenColumnCount="1"
GridLinesVisibility="None" Style="{StaticResource ConsensusDataGridStyle}" FontSize="12" >
</DataGrid>
</UserControl>
在数据填充到DataGrid之前,DataGrid会显示“Viewer.Views.MainViewModel”。文本居中。类名将输出到屏幕上有什么原因吗?谢谢。这是因为您要在中绑定到整个视图模型
<!--Global View Model Locator-->
<vm:ViewModelLocator x:Key="Locator"
d:IsDataSource="True" />
<!-- Main menu style -->
<Style x:Key="MainMenu" TargetType="{x:Type MenuItem}">
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontSize" Value="14"/>
</Style>
<!-- Data grid cell style -->
<Style x:Key="CenterCellStyle" TargetType="DataGridCell">
<Style.Setters>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style.Setters>
</Style>
<!-- DataGridColumnHeader style -->
<Style x:Key="ColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Grid>
<dg:DataGridHeaderBorder x:Name="HeaderBorder" BorderThickness="0"
Padding="0" SeparatorVisibility="Hidden">
<Border BorderThickness="0">
<TextBlock Text="{Binding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
</Border>
</dg:DataGridHeaderBorder>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- CENTER aligned DataGridColumnHeader style -->
<Style x:Key="CenterColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"
BasedOn="{StaticResource ColumnHeaderStyle}">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
<!-- RIGHT aligned DataGridColumnHeader style -->
<Style x:Key="RightColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"
BasedOn="{StaticResource ColumnHeaderStyle}">
<Setter Property="HorizontalContentAlignment" Value="Right"/>
</Style>
<!-- Consensus DataGrid -->
<Style x:Key="ConsensusDataGridStyle" TargetType="{x:Type DataGrid}">
<Style.Setters>
<Setter Property="ColumnHeaderStyle" Value="{StaticResource CenterColumnHeaderStyle}"/>
</Style.Setters>
</Style>
<!-- Validation Error Template -->
<DataTemplate DataType="{x:Type ValidationError}">
<TextBlock FontStyle="Italic" Foreground="Red"
HorizontalAlignment="Left" Margin="5,5" Text="{Binding Path=ErrorContent}"/>
</DataTemplate>
</ResourceDictionary>
</Application.Resources>
ItemsSource="{Binding}"
您可能想要绑定视图模型类的集合属性或(可观察的)集合属性。您能再解释一下吗。我还是被卡住了。我假设(从名称)MainViewModel是一个具有属性的类(您可以绑定到属性)。它有ObservableCollection类型的属性吗?我没有看到ObservableCollection属性。我在类中看到的唯一数据是用于填充网格的dtGridReads变量。dtGridReads似乎是网格控件的名称。它也是MainViewModel类上的属性名称吗?
<!--Global View Model Locator-->
<vm:ViewModelLocator x:Key="Locator"
d:IsDataSource="True" />
<!-- Main menu style -->
<Style x:Key="MainMenu" TargetType="{x:Type MenuItem}">
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontSize" Value="14"/>
</Style>
<!-- Data grid cell style -->
<Style x:Key="CenterCellStyle" TargetType="DataGridCell">
<Style.Setters>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style.Setters>
</Style>
<!-- DataGridColumnHeader style -->
<Style x:Key="ColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Grid>
<dg:DataGridHeaderBorder x:Name="HeaderBorder" BorderThickness="0"
Padding="0" SeparatorVisibility="Hidden">
<Border BorderThickness="0">
<TextBlock Text="{Binding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
</Border>
</dg:DataGridHeaderBorder>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- CENTER aligned DataGridColumnHeader style -->
<Style x:Key="CenterColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"
BasedOn="{StaticResource ColumnHeaderStyle}">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
<!-- RIGHT aligned DataGridColumnHeader style -->
<Style x:Key="RightColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}"
BasedOn="{StaticResource ColumnHeaderStyle}">
<Setter Property="HorizontalContentAlignment" Value="Right"/>
</Style>
<!-- Consensus DataGrid -->
<Style x:Key="ConsensusDataGridStyle" TargetType="{x:Type DataGrid}">
<Style.Setters>
<Setter Property="ColumnHeaderStyle" Value="{StaticResource CenterColumnHeaderStyle}"/>
</Style.Setters>
</Style>
<!-- Validation Error Template -->
<DataTemplate DataType="{x:Type ValidationError}">
<TextBlock FontStyle="Italic" Foreground="Red"
HorizontalAlignment="Left" Margin="5,5" Text="{Binding Path=ErrorContent}"/>
</DataTemplate>
</ResourceDictionary>
</Application.Resources>