2014-07-20 90 views
0

我在這裏跟着教程:http://www.wpf-tutorial.com/datagrid-control/introduction/爲什麼不填充我的WPF數據網格?

我設置了DataGrid,創建了一個包含數據源的集合,並將DataGrid的ItemsSource設置爲該集合。在運行該程序時,似乎行數是正確的,但所有行都是空白的。我需要更改哪些數據才能正確顯示數據?

XAML:

<Window x:Class="Task_Timer.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Task Timer" Height="284" Width="598" MinWidth="500" MinHeight="400"> 
    <Grid Margin="10"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
     <DataGrid x:Name="ProcessBox" Margin="0" SelectionMode="Extended" ScrollViewer.HorizontalScrollBarVisibility="Hidden" GridLinesVisibility="None" AutoGenerateColumns="False" IsManipulationEnabled="True" IsReadOnly="True" HorizontalAlignment="Left" Width="285"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Process" Binding="{Binding ProcessName}" /> 
       <DataGridTextColumn Header="Memory" Binding="{Binding Memory}" /> 
      </DataGrid.Columns> 
     </DataGrid> 
     <Button Content="Button" Grid.Column="1" HorizontalAlignment="Left" Margin="10,0,0,0" VerticalAlignment="Top" Width="75"/> 
    </Grid> 
</Window> 

C#:

namespace Task_Timer 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
      List<ProcessContainer> items = new List<ProcessContainer>(); 
      foreach (Process process in Process.GetProcesses()) 
      { 
       items.Add(new ProcessContainer(process.ProcessName, 10)); 
      } 

      ProcessBox.ItemsSource = items; 
     } 
    } 

    public class ProcessContainer 
    { 
     public string ProcessName; 
     public int Memory; 

     public ProcessContainer(string name, int memory) 
     { 
      ProcessName = name; 
      Memory = memory; 
     } 
    } 

} 

回答

3

你缺少得到設置。您需要設置類ProcessContainer

更改它像這裏面的屬性的值,

public class ProcessContainer 
     { 
      public string ProcessName {get;set;} 
      public int Memory { get; set; } 

      public ProcessContainer(string name, int memory) 
      { 
       ProcessName = name; 
       Memory = memory; 
      } 
     } 
+0

有趣。我總是認爲得到和設置是隱含在那裏。無論如何工作,謝謝! – ssb

+3

這個答案可能會誤導別人從實際的原因。事實上,只有***屬性***可以用於綁定,***域***不能(在用戶代碼中不提及其他不好的東西)。 –

+0

@KingKing是對我的代碼或此答案中的代碼的引用「壞事」? – ssb

0

改變你的ProcessContainer類,如下所示

public class ProcessContainer 
    { 
     private string process; 

     public string ProcessName 
     { 
      get { return process; } 
      set { process = value; } 
     } 

     private int memory; 

     public int Memory 
     { 
      get { return memory; } 
      set { memory = value; } 
     } 


     public ProcessContainer(string name, int memory) 
     { 
      ProcessName = name; 
      Memory = memory; 
     } 
    } 
相關問題