2016-08-23 2 views
0

Я изучаю XAML с WPF, и я пытаюсь отобразить некоторые данные в сетке, но я не могу на всю жизнь получить его, чтобы показать. появятся поля, но они пусты без текста. вот XAMLWPF: данные не отображаются в моем datagrid

<Window x:Class="MoodWPF.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:MoodWPF" 
    mc:Ignorable="d" 
    Height="810.573" 
    Width="1026.432" 
    MinWidth="600"> 
<Grid x:Name="mainGrid" Background="#333333"> 
    <DataGrid Width="400" Height="400" x:Name="trackList" HorizontalAlignment="Center" VerticalAlignment="Center" Background="#FF404040" BorderBrush="{x:Null}" ColumnHeaderHeight="22" GridLinesVisibility="Vertical" RowBackground="#FF404040" AlternatingRowBackground="#FF333333" RowHeight="20" SelectionMode="Single"> 
     <DataGrid.Columns> 
      <DataGridTemplateColumn x:Name="Track" Header="Track" Width="100" IsReadOnly="True"> 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="Artist" Width="100" IsReadOnly="True"> 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="Album" Width="100" IsReadOnly="True"> 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="Time" Width="100" IsReadOnly="True"> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

и C# с помощью которого им пытаются вставить некоторые случайные данные

namespace MoodWPF 
{ 
/// <summary> 
/// Interaction logic for MainWindow.xaml 
/// </summary> 
public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 


     // create and add three lines of fake data to be displayed, here 

     trackList.Items.Add(new DataItem { Track = "a.1", Artist = "a.2", Album = "a.3", Time = "a.4" }); 
     trackList.Items.Add(new DataItem { Track = "a.1", Artist = "a.2", Album = "a.3", Time = "a.4" }); 
     trackList.Items.Add(new DataItem { Track = "a.1", Artist = "a.2", Album = "a.3", Time = "a.4" }); 

     /* 
     Collection<DataItem> users = new Collection<DataItem>(); 
     users.Add(new DataItem { Track = "firstname-1", Artist = "lastname-1" }); 
     users.Add(new DataItem { Track = "firstname-2", Artist = "lastname-2" }); 
     users.Add(new DataItem { Track = "firstname-3", Artist = "lastname-3" }); 
     users.Add(new DataItem { Track = "firstname-4", Artist = "lastname-4" }); 
     trackList.ItemsSource = users; 

    } 
} 

public class DataItem 
{ 
    public string Track { get; set; } 
    public string Artist { get; set; } 
    public string Album { get; set; } 
    public string Time { get; set; } 
} 

}

, что я делаю неправильно/не делать? иметь в виду, я новичок в WPF и Xaml

+0

если вы используете 'DataGrid.Columns' - то вы должны также добавьте 'AutoGenerateColumns =" ​​False "'. Или удалите все из вашего XAML - тогда DataGrid автоматически обнаружит ваши столбцы. – Vladimir

ответ

0

Когда вам нужен только текст попробовать:

<DataGrid.Columns> 
    <DataGridTextColumn x:Name="Track" Width="100" Binding="{Binding Track}" Header="Track"/> 
    ... 

или вам нужен определенный шаблон:

<DataGridTemplateColumn Header="Artist" Width="100" IsReadOnly="True"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Artist}"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 
0

Вы должны связать свою модель (вероятно, Список конкретного объекта) в DataGrid и его атрибуты в его соответствующие столбцы.

Вид:

<DataGrid x:Name="TrackList" DataContext="{Binding Source=TrackList}" AutoGenerateColumns="False"> 
     <DataGrid.Columns>     
      <DataGridTextColumn Header="Track" Binding="{Binding Track}"/> 
      <DataGridTextColumn Header="Artist" Binding="{Binding Artist}"/> 
      ........... 
      ........... 
     </DataGrid.Columns> 
</DataGrid> 
0

Есть несколько вопросов,

(я) Вам нужно иметь коллекцию для привязки к DataGrid, поэтому добавлять элементы в список или ObservableCollection

Код За:

public partial class MainWindow : Window 
     { 
      public MainWindow() 
      { 
       InitializeComponent(); 
       List<DataItem> data = new List<DataItem>(); 
       data.Add(new DataItem { Track = "a.1", Artist = "a.2", Album = "a.3", Time = "a.4" }); 
       data.Add(new DataItem { Track = "a.1", Artist = "a.2", Album = "a.3", Time = "a.4" }); 
       data.Add(new DataItem { Track = "a.1", Artist = "a.2", Album = "a.3", Time = "a.4" }); 
       trackList.ItemsSource = data; 
      } 

     } 
     public class DataItem 
     { 
      public string Track { get; set; } 
      public string Artist { get; set; } 
      public string Album { get; set; } 
      public string Time { get; set; } 
     } 

(б) Установить DataGrid AutoGenerateColumns="True"

Если вы установили AutoGenerateColums = ложные,

XAML:

<DataGrid Width="400" Height="400" x:Name="trackList" HorizontalAlignment="Center" VerticalAlignment="Center" Background="#FF404040" BorderBrush="{x:Null}" ColumnHeaderHeight="22" GridLinesVisibility="Vertical" RowBackground="#FF404040" AlternatingRowBackground="#FF333333" RowHeight="20" SelectionMode="Single"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Binding="{Binding Track}" x:Name="Track" Header="Track" Width="100" IsReadOnly="True"> 
       </DataGridTextColumn> 
       <DataGridTextColumn Binding="{Binding Artist}" Header="Artist" Width="100" IsReadOnly="True"> 
       </DataGridTextColumn> 
       <DataGridTextColumn Binding="{Binding Album}" Header="Album" Width="100" IsReadOnly="True"> 
       </DataGridTextColumn> 
       <DataGridTextColumn Binding="{Binding Time}" Header="Time" Width="100" IsReadOnly="True"> 
       </DataGridTextColumn> 
      </DataGrid.Columns> 
     </DataGrid> 
Смежные вопросы