2016-06-28 13 views
0

& JSONファイルをデータグリッドに数日間デシリアライズして(JSON.netを使用)、グリッドは空白になり続けます。私はそれが最も明らかであると確信していると私はおそらくいくつかの主要な項目を逃している...しかし、私は学んでいるだけでこれを把握するように見えることはできません。いくつかの指導を感謝します!ここでDataGridにJSONファイルをシリアライズ

は私のXAMLです:ここで

 <DataGrid x:Name="dataGrid" 
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch" 
       AutoGenerateColumns="False" 
       ItemsSource="{Binding items}" Margin="0,36,0,0"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="projectNumber" Binding="{Binding Path=projectNumber}"/> 
      <DataGridTextColumn Header="projectName" Binding="{Binding Path=projectName}"/> 
      <DataGridTextColumn Header="Directory1" Binding="{Binding Path=Directory1}"/> 
      <DataGridTextColumn Header="Directory2" Binding="{Binding Path=Directory2}"/> 
      <DataGridTextColumn Header="Directory3" Binding="{Binding Path=Directory3}"/> 
     </DataGrid.Columns> 
    </DataGrid> 

は私のバックエンドです:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     // deserialize JSON directly from a file 
     using (StreamReader file = File.OpenText(@"C:\Projects\JSONimport\projectList.json")) 
     { 
      JsonSerializer serializer = new JsonSerializer(); 
      ProjectThread projectThread2 = (ProjectThread)serializer.Deserialize(file, typeof(ProjectThread)); 
     } 
    } 
    public void LoadJson() 
    { 
     using (StreamReader r = new StreamReader(@"C:\Projects\JSONimport\projectList.json")) 
     { 
      string json = r.ReadToEnd(); 
      ObservableCollection<ProjectThread> items = JsonConvert.DeserializeObject<ObservableCollection<ProjectThread>>(json); 
     } 
    } 

} 
public class ProjectThread 
{ 
    public String projectNumber { get; set; } 
    public String projectName { get; set; } 
    public String Directory1 { get; set; } 
    public String Directory2 { get; set; } 
    public String Directory3 { get; set; } 
} 

そしてここでは、私のテスターJSONファイル形式です:

{ 
    "projectNumber": "100", 
    "projectName": "sample", 
    "Directory1": "x", 
    "Directory2": "x", 
    "Directory3": "x" 
    }, 
    { 
    "projectNumber": "101", 
    "projectName": "sample 2", 
    "Directory1": "x", 
    "Directory2": "x", 
    "Directory3": "x" 
    }, 

答えて

0

私は道を、次の中で、あなたのコードを変更し、それは私のために働いた。私はあなたがプライベートフィールドをデータグリッドにバインドしていると思います。また、LoadJson関数内でItemの新しいオブジェクトを初期化しています。

のViewModel

private ObservableCollection<ProjectThread> _items; 

     public ObservableCollection<ProjectThread> Items 
     { 
      get { return _items; } 
      set 
      { 
       _items = value; 
       this.NotifyPropertyChanged("Items"); 
      } 
     } 

     public ViewModel() 
     { 
      Items = new ObservableCollection<ProjectThread>(); 
      this.LoadJson(); 
     } 

     public void LoadJson() 
     { 
      using (StreamReader r = new StreamReader(@"d:\file.txt")) 
      { 
       string json = r.ReadToEnd(); 
       Items = JsonConvert.DeserializeObject<ObservableCollection<ProjectThread>>(json); 
      } 
     } 

XAML

<DataGrid x:Name="dataGrid" 
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch" 
       AutoGenerateColumns="False" 
       ItemsSource="{Binding Items}" Margin="0,36,0,0"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="projectNumber" Binding="{Binding Path=projectNumber}"/> 
       <DataGridTextColumn Header="projectName" Binding="{Binding Path=projectName}"/> 
       <DataGridTextColumn Header="Directory1" Binding="{Binding Path=Directory1}"/> 
       <DataGridTextColumn Header="Directory2" Binding="{Binding Path=Directory2}"/> 
       <DataGridTextColumn Header="Directory3" Binding="{Binding Path=Directory3}"/> 
      </DataGrid.Columns> 
     </DataGrid> 

JSON

[{ 
    "projectNumber": "100", 
    "projectName": "sample", 
    "Directory1": "x", 
    "Directory2": "x", 
    "Directory3": "x" 
    }, 
    { 
    "projectNumber": "101", 
    "projectName": "sample 2", 
    "Directory1": "x", 
    "Directory2": "x", 
    "Directory3": "x" 
    }] 
+1

MainWindowのDataContextをViewModelクラスのインスタンスに設定することを忘れないでください。 – Clemens

+0

皆さんのご意見は皆様のご協力とご協力を得て大変助けになりました。 JustinはMVVMへの私の紹介だったので、ViewModelクラスのようにコードを指定してくれてありがとう。あなたが取り組んでいるものに当てはまるときは、いつでももっと学びやすくなります! – ctalley5

+0

それが成功した場合は、それをanswer :-)としてマークしてください。 –

0

Guysは、あなたの入力の両方が働いて、途方もなく助けました。 JustinはMVVMへの私の紹介だったので、ViewModelクラスのようにコードを指定してくれてありがとう。あなたが取り組んでいるものに当てはまるときは、いつでももっと学びやすくなります!

関連する問題