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 の内容を更新する方法を知る必要がありますか?