1

WPF で動的に DataGrid を作成する必要があります。グリッドには、動的に生成されたコントロール (コンボ ボックス、テキスト ボックス) を含む行と列を設定する必要があります。グリッドに 3 つの列と N 行を設定する必要があります (行の数は、XML ファイルで使用可能な XML ノードに基づきます)。WPF アプリケーションに Content として DocumentProperties.XML があります。

    <DocumentProperties>
<Properties>
  <Property Name="DocumentName">
      <Id>1</Id>
      <Name>DocumentName</Name>
      <Type>LogicalOperator</Type>
      <Language>en-US</Language>
  </Property> 
   <Property Name="TemplateUsed">
      <Id>2</Id>
      <Name>TemplateUsed</Name>
      <Type>LogicalOperator</Type>
      <Language>en-US</Language>
  </Property> 
  ....
 </Properties>
<Operators>
<Category Type="LogicalOperator">
    <Operator value="Equal"></Operator>
    <Operator value="NotEqual"></Operator>
</Category>
<Category Type="TimeOperator">
    <Operator value="Greater"></Operator>
    <Operator value="Smaller"></Operator>
    <Operator value="GreaterOrEqual"></Operator>
    <Operator value="SmallerOrEqual"></Operator>
</Category>
</DocumentProperties>

グリッドでは、Colum1 と Column2 に ComboBox を作成する必要があります。column1 コンボは、XML で使用可能な Name 属性値をロードします。最初のコンボ ボックスの選択の Type 要素の値に基づいて、2 番目のコンボ ボックスにカテゴリ ノードの値をロードする必要があります。グリッドの 3 番目の列には、選択したプロパティのタイプに基づいて、テキスト ボックスまたは Datepikcer のいずれかを入力する必要があります。XML に 6 つのプロパティ ノードがある場合、グリッド内の行の最大数は <=6 である必要があります。上記の内容は、高度な検索のプロパティを選択するために使用されます。

コードビハインドからグリッドを作成することから始めました。私が試したコードの一部は次のとおりです。

documentPropertyCombo = new ComboBox[drivesCount];
                operatorCombo = new ComboBox[drivesCount];
                //Load the XML Document
                XmlDataProvider xdp = new XmlDataProvider();
                XmlDocument doc = new XmlDocument();
                doc.Load(".\\Data\\DocumentProperties.xml");
                xdp.Document = doc;
                xdp.XPath = "DocumentProperties/Properties/Property";
                xdp.Document = doc;

                drivesGrid.DataContext = xdp;
                var binding = new Binding("DocumentProperties/Properties/Property") { Source = xdp };
                binding.Mode = BindingMode.OneTime;

// Adding ComboBoxes and TextBoxes to Grid.
                for (int i = 0, j = 1; i < drivesCount; i++, j++)
                {
                    //Initialize ComboBox to show Document Property.
                    //documentPropertyCombo[i] = new ComboBox();
                    documentPropertyCombo[i] = new ComboBox(); //CreateComboBox(new Thickness(30, 101, 0, 0), i + j, 1);
                    documentPropertyCombo[i].Width = 101;
                    documentPropertyCombo[i].Height  = 30;
                    documentPropertyCombo[i].Visibility = Visibility.Visible;
                    //BindingOperations.SetBinding(myText, TextBlock.TextProperty, myBinding);
                    documentPropertyCombo[i].IsReadOnly = true;
                    documentPropertyCombo[i].DisplayMemberPath = "@Name";
                    BindingOperations.SetBinding(documentPropertyCombo[i], ComboBox.TextProperty, binding);

                    Grid.SetRow(documentPropertyCombo[i], i + j);
                    Grid.SetColumn(documentPropertyCombo[i], 1);
                    drivesGrid.Children.Add(documentPropertyCombo[i]);

 ...
}
LayoutRoot.Children.Add(drivesGrid);

コントロールは動的に作成されますが、データは ComboBox にバインドされません。上記のコードで何か不足していますか? ComboxBox の DataTemplate を動的に追加する必要があると思います。上記のコードを確認できる人はいますか? また、Column1 に動的に作成されたコンボボックスのイベントを追加し、Combo1 の選択に基づいて Column2 の ComboxBoxes の内容を更新する方法を知る必要がありますか?

4

1 に答える 1

0

あなたは言った...

WPF で動的に DataGrid を作成する必要があります

WPF データグリッド コントロールを使用していますか? サンプルコードにはどこにもありません。

それを使用していた場合は、データ グリッドを使用して、XML からのバインディングを指定することがDataGridTextBoxColumnできますDataGridComboBoxColumnXPath

それを使うことをお勧めします。

于 2011-10-11T12:31:28.670 に答える