2016-04-03 12 views
1

私はWPF/C#で書かれた料理本を自分で作っています。 さらに、私はデータバインディングが初めてです。コード内のデータグリッドにバインドする

私の問題は、実行時にバインドを含むコードビハインドでTabItemでDatagridを生成したいのです。私はすべてのTabItemを動的に作成したいので、XAMLでDatagridを設定することはできません。

これまでのコードを以下に示します。

XAML:生成のための

<UniformGrid Columns="2" Rows="1"> 
<TabControl Name="TabControl" TabStripPlacement="Left"/> 
    <TabItem Header= "first dish" Name = "firstdish"/> 
</UniformGrid> 

XAML.cs:

//New Grid 
     var Grid = new DataGrid(); 

     //Start Test list creation with three items 
     var TestList = new List<Receipt>(); 

     //Set binding 
     Grid.ItemsSource = TestList; 

     var Rec = new Receipt(); 
     Rec.Creator = "DaJohn1"; 
     Rec.ID = 1; 
     Rec.Title = "TestReceipt1"; 

     var Rec2 = new Receipt(); 
     Rec2.Creator = "DaJohn2"; 
     Rec2.ID = 2; 
     Rec2.Title = "TestReceipt2"; 

     var Rec3 = new Receipt(); 
     Rec3.Creator = "DaJohn3"; 
     Rec3.ID = 3; 
     Rec3.Title = "TestReceipt3"; 

     TestList.Add(Rec); 
     TestList.Add(Rec2); 
     TestList.Add(Rec3); 
     //End Test list creation 

     //Add Column 
     var SingleColumn = new DataGridTextColumn(); 
     Grid.Columns.Add(SingleColumn); 
     SingleColumn.Binding = new Binding("Creator"); 
     SingleColumn.Header = "Creator"; 

     //Add Column 
     var SingleColumn2 = new DataGridTextColumn(); 
     Grid.Columns.Add(SingleColumn2); 
     SingleColumn2.Binding = new Binding("Title"); 
     SingleColumn2.Header = "Title"; 

     //Set tabitem content to datagrid 
     firstdish.Content = Grid; 

を私が得ているすべては、4行(のようなルックスを持つデータグリッドでありますアイテムの数が正しい)、それらはすべて空であり、見るべきデータはない。 先週の月曜日以来、私はこれを見つめており、どこでも答えを見つけることはできません。

ありがとうございました。

+0

ReceiptクラスのCreator変数は公開されていますか? UIがアクセスするには、次のようにする必要があります。 public string Creator {get; set;} – Foxman

答えて

0

は、それが自動的に変更についてのUIを通知として

var TestList = new ObservableCollection<Receipt>(); 

var TestList = new List<Receipt>(); 

を変更してみてください。 私はsimilar problemのアイテムをレンダリングしていないので、これがそうかもしれません。

+0

これは変更されませんでした。 – DaJohn

0

主なエラーは、xamlコードでタブコントロールを作成してTabItemをその外に置くと、Tabitemがそのコントロールの中になければならないということです正しく動作します。したがって、最初のエラーがある:あなたが私の意見に進む前に行う必要があり

<TabControl Name="TabControl" TabStripPlacement="Left"> 
<TabItem Header="First dish" Name = "firstdish" /> 
</TbControl> 

他のものは以下のとおりです。

  • はあなたの窓や他のUI要素自体を割り当てDataContextの
  • として
  • 領収クラスていることを確認しますすべてのプロパティによって生成される必要があるINotifyPropertyChangedイベントを実装するか、またはDependencyPropertiesとしてプロパティを実装します(後者が不要な場合でも)
  • ObservableCollectionでデータソースTestListを変換します
  • それはDataContextの

になるように、クラスのプロパティではないローカル変数としてtestlistというの作成私はあなたがそれがどのように機能するかをよりよく見てみましょうするには、上記表示し、あなたのコードを使用して、少量のサンプルを作りました。

XAML、あなたのために働く必要があるコードの下 TestClassDataGrid.zip

0

<TabControl Name="TabControl" TabStripPlacement="Left"> 
     <TabItem Header= "first dish" Name = "firstdish"/> 
    </TabControl> 

あなたはここにzipファイルをダウンロードすることができます。CSファイル

public Window() 
     { 
      InitializeComponent(); 

      var Grid = new DataGrid(); 

      //Start Test list creation with three items 
      var TestList = new List<Receipt>(); 

      //Set binding 
      Grid.ItemsSource = TestList; 

      var Rec = new Receipt(); 
      Rec.Creator = "DaJohn1"; 
      Rec.ID = 1; 
      Rec.Title = "TestReceipt1"; 

      var Rec2 = new Receipt(); 
      Rec2.Creator = "DaJohn2"; 
      Rec2.ID = 2; 
      Rec2.Title = "TestReceipt2"; 

      var Rec3 = new Receipt(); 
      Rec3.Creator = "DaJohn3"; 
      Rec3.ID = 3; 
      Rec3.Title = "TestReceipt3"; 

      TestList.Add(Rec); 
      TestList.Add(Rec2); 
      TestList.Add(Rec3); 
      //End Test list creation 

      //Add Column 
      var SingleColumn = new DataGridTextColumn(); 
      Grid.Columns.Add(SingleColumn); 
      SingleColumn.Binding = new Binding("Creator"); 
      SingleColumn.Header = "Creator"; 

      //Add Column 
      var SingleColumn2 = new DataGridTextColumn(); 
      Grid.Columns.Add(SingleColumn2); 
      SingleColumn2.Binding = new Binding("Title"); 
      SingleColumn2.Header = "Title"; 

      //Set tabitem content to datagrid 

      Grid.AutoGenerateColumns = false; 
      firstdish.Content = Grid; 
     } 
関連する問題