2016-08-23 12 views
0

Ich lerne XAML mit WPF und ich versuche, einige Daten in einem Raster anzuzeigen, aber ich kann nicht für das Leben von mir bekommen es zu zeigen. Die Felder erscheinen, aber sie sind leer ohne Text. hier ist der XAMLWPF: Daten werden nicht in meinem Datagrid angezeigt

<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> 

und die C#, mit denen einige Zufallsdaten

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; } 
} 

}

einfügen im Versuch, was ich falsch mache/nicht tue? denken Sie daran, ich bin ein Anfänger mit WPF und XAML

+0

, wenn Sie mit 'DataGrid.Columns' - dann sollten Sie auch füge 'AutoGenerateColumns = "False" 'hinzu. Oder entfernen Sie alle aus Ihrem XAML - dann erkennt DataGrid automatisch Ihre Spalten. – Vladimir

Antwort

0

Wenn Sie nur Text versuchen müssen:

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

oder Sie benötigen bestimmte Vorlage:

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

Sie müssen Ihr Modell binden (wahrscheinlich eine Liste spezifischer Objekte) für das DataGrid und seine Attribute für die entsprechenden Spalten.

Art:

<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

Es gibt einige Probleme,

(i) Sie müssen eine Sammlung haben, um Datagrid zu binden, fügen Sie daher die Elemente in einer Liste oder ObservableCollection

-Code Behind:

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; } 
     } 

(ii) Set Datagrid AutoGenerateColumns="True"

Wenn Sie AutoGenerateColums = false gesetzt

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>