GridViewColumnHeader не отображается

У меня есть форма WPF с некоторыми GridViewColumns в них для отображения данных. Однако, хотя я установил свойство Header в каждом столбце, заголовки никогда не появляются.

XAML:

<Window x:Class="MyProject.ViewModel.MyClassView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="clr-namespace:MyProject.ViewModel"        
        Title="Title" Height="210.4" Width="500" ResizeMode="NoResize" 
        WindowStartupLocation="CenterOwner" WindowStyle="ToolWindow">
    <Window.Resources>
        <DataTemplate x:Key="tempA">
            <TextBlock Text="{Binding Path=dataA}"/>
        </DataTemplate>
        <DataTemplate x:Key="tempB">
            <TextBlock Text="{Binding Path=dataB}"/>
        </DataTemplate>
        <DataTemplate x:Key="tempC">
            <TextBlock Text="{Binding Path=dataC}"/>
        </DataTemplate>
    </Window.Resources>
    <Grid Margin="5,5,5,5">
        <ListView x:Name="MyList" ItemsSource="{Binding MyDataCollection}" MouseDoubleClick="ListView_MouseDoubleClick">
            <ListView.View>
                <GridView>
                    <GridViewColumn x:Name="colA" Header="Name" Width="100" CellTemplate="{StaticResource tempA}"/>
                    <GridViewColumn x:Name="colB" Header="Type" Width="100" CellTemplate="{StaticResource tempB}"/>
                    <GridViewColumn x:Name="colC" Header="Diameter" Width="100" CellTemplate="{StaticResource tempC}"/>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>

Код-за:

namespace MyProject.ViewModel
{
    public partial class MyClassView : Window
    {
        public object SelectedItem = null;

        public MyClassView()
        {
            InitializeComponent();
        }

        private void ListView_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            SelectedItem = MyList.SelectedItem;
        }
    }
}

ViewModel:

namespace MyProject.ViewModel
{
    public class MyViewModel : INotifyPropertyChanged
    {
        public string Type { get; set; }
        public object MyDataCollection { get; set; }

        public MyViewModel(object collection, string type)
        {
            Type = type;
            MyDataCollection = collection;
        }

        internal void RaisePropertyChanged(string prop)
        {
            if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(prop)); }
        }
        public event PropertyChangedEventHandler PropertyChanged;
    }
}

Объект, который передается в конструктор ViewModel, гарантированно содержит dataA, dataB и dataC среди других.

Может ли кто-нибудь объяснить, почему заголовки в моем GridView не отображаются?

1 ответ

Решение

Попробуйте вместо этого использовать DataGrid.

Это будет выглядеть примерно так:

<DataGrid ItemsSource="{Binding MyDataCollection}" AutoGenerateColumns="False" >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True"/>
        <DataGridComboBoxColumn Header="Type" ItemsSource="{Binding TypeList}" SelectedItemBinding="{Binding Type}"/>
        ...
    </DataGrid.Columns>
</DataGrid>
Другие вопросы по тегам