私はSilverlight MVVMパターンで作業していますが、最初に4列のデータグリッド(コンポーネント1)があり、後で実行時にコンボボックスの列のリストが表示され、列を選択できます彼はデータグリッドを見て、ボタンをクリックしてDataGridに列を追加したいので、実行時にはその列をDataGridに追加する必要があります。 Silverlight MVVMパターンを使用することは可能ですか?助けてください。実行時に新しい列を追加する
1
A
答えて
1
確かに可能です。 xamlでデータグリッドとバインディングを定義したら、データバインディングとコード内の列の追加が必要になります。必ず、autoGenerateColumnsをオフにしてください。私は私の列を記述する別のリストを保持します。私は、ツールチップとヘッダを各列ごとに異なるものにしたいので、コード内に列テンプレートも定義します。 float列またはinteger列を追加する例を次に示します。
最初にグリッドを定義する - コンポーネント1のデータグリッドを使用しているとは思わない
これはあなたのグリッド内の異なるデータ型を持つことができますpublic static void BuildDataGridColumns(DataGrid dataGrid, List<DataGridColumnDescription> columnDescriptionList)
{
// clear out the old columns and re-build them with new criteria
dataGrid.Columns.Clear();
// add columns based on the description
int index = 0;
foreach (DataGridColumnDescription column in columnDescriptionList)
{
if (DataGridColumnDescriptionValueType.floatDataType == column.valueType)
{
dataGrid.Columns.Add(DataGridColumnBuilder.CreateFloatColumn(index++, column.name, column.header, column.description));
}
else
{
dataGrid.Columns.Add(DataGridColumnBuilder.CreateIntColumn(index++, column.name, column.header, column.description));
}
}
}
:
<!-- NOTE: Creating columns is done Programmatically -->
<sdk:DataGrid x:Name="DataGridForDistrictSummaries" Grid.Column="1"
AutoGenerateColumns="False"
VerticalScrollBarVisibility="Visible"
HorizontalScrollBarVisibility="Visible"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
MinHeight="70"
ItemsSource="{Binding dataGridView}"
AlternatingRowBackground="LightBlue"
>
</sdk:DataGrid>
は、その後私はグリッド全体を再構築し、あなたのグリッド列を構築する必要があります。これは、データの表示方法を制御する上で重要です。この場合、私はこのコードでスタイルを定義
public static DataGridTextColumn CreateFloatColumn(int index, string fieldName, string header, string description)
{
DataGridTextColumn column = new DataGridTextColumn();
column.Header = header;
column.HeaderStyle = BuildColumnHeaderStyle(description);
column.Binding = new Binding("floatValuesList[" + index + "]");
column.Binding.StringFormat = "0.00";
column.CellStyle = BuildFloatCellStyle(fieldName, description);
return column;
}
public static DataGridTextColumn CreateIntColumn(int index, string fieldName, string header, string description)
{
DataGridTextColumn column = new DataGridTextColumn();
column.Header = header;
column.HeaderStyle = BuildColumnHeaderStyle(description);
column.Binding = new Binding("intValuesList[" + index + "]");
column.CellStyle = BuildCellStyle(fieldName, description);
return column;
}
を表示するには、2進ポイントを望んでいた、私はハードいくつかのことをコード化しました - しかし、あなたはあなたが必要として、それは、動的にすることができます。
private static Style BuildColumnHeaderStyle(string tooltip)
{
FontWeight fw = FontWeights.Bold;
Style newGridHeaderStyle = new Style(typeof(DataGridColumnHeader));
newGridHeaderStyle.Setters.Add(new Setter { Property = DataGridColumnHeader.FontSizeProperty, Value = 9.0 });
newGridHeaderStyle.Setters.Add(new Setter { Property = DataGridColumnHeader.FontWeightProperty, Value = FontWeights.Bold });
newGridHeaderStyle.Setters.Add(new Setter { Property = DataGridColumnHeader.ContentTemplateProperty, Value = CreateDataGridColumnHeaderTemplate(tooltip) });
return newGridHeaderStyle;
}
private static Style BuildFloatCellStyle(string fieldName, string tooltip)
{
Style newGridCellStyle = new Style(typeof(DataGridCell));
newGridCellStyle.Setters.Add(new Setter { Property = DataGridCell.FontSizeProperty, Value = 11.0 });
newGridCellStyle.Setters.Add(new Setter { Property = DataGridCell.HorizontalContentAlignmentProperty, Value = HorizontalAlignment.Right });
return newGridCellStyle;
}
private static Style BuildCellStyle(string fieldName, string tooltip)
{
Style newGridCellStyle = new Style(typeof(DataGridCell));
newGridCellStyle.Setters.Add(new Setter { Property = DataGridCell.FontSizeProperty, Value = 11.0 });
newGridCellStyle.Setters.Add(new Setter { Property = DataGridCell.HorizontalContentAlignmentProperty, Value = HorizontalAlignment.Right });
return newGridCellStyle;
}
セルテンプレートもコードで作成する必要があります。これは、XAMLのテキスト文字列を作成し、リンク参照してください
private static DataTemplate CreateDataGridColumnHeaderTemplate(string tooltip)
{
string str = @"<DataTemplate xmlns='http://schemas.microsoft.com/client/2007'>"
+ @"<ContentControl Content='{Binding}'>"
+ @"<ToolTipService.ToolTip>"
+ @"<ToolTip Content='" + tooltip + "'>"
+ @"</ToolTip>"
+ @"</ToolTipService.ToolTip>"
+ @"</ContentControl >"
+ @"</DataTemplate>";
return (DataTemplate)XamlReader.Load(str);
}
0
それをロードするためにXamlReaderを使用しています。http://blogs.msdn.com/b/scmorris/archive/2008/04/14/defining-silverlight-datagrid-columns-at-runtime.aspx
コードスニペットをリンクの上からです(これはthat.Otherwayを行うための一つの方法であるがまた、その中で説明されていますリンク)
XAML:
<UserControl.Resources>
<local:DateTimeConverter x:Key="DateConverter" />
<DataTemplate x:Key="myCellTemplate">
<TextBlock
Text="{Binding Birthday,
Converter={StaticResource DateConverter}}"
Margin="4"/>
</DataTemplate>
<DataTemplate x:Key="myCellEditingTemplate">
<basics:DatePicker
SelectedDate="{Binding Birthday, Mode=TwoWay}" />
</DataTemplate>
コードの背後にコード:
DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
templateColumn.Header = "Birthday";
templateColumn.CellTemplate = (DataTemplate)Resources["myCellTemplate"];
templateColumn.CellEditingTemplate =
(DataTemplate)Resources["myCellEditingTemplate"];
targetDataGrid.Columns.Add(templateColumn);
関連する問題
- 1. 動的に実行時に新しいメソッドとプロパティを追加
- 2. 実行時に文字列グリッド列を追加します
- 3. VBA実行時にMS Wordに新しいフィールドコードを追加するには
- 4. ExtJS:実行時にMenuインスタンスに新しいMenuItemを追加する
- 5. エンティティフレームワークで実行時に既存のコンテキストに新しいモデルを追加する
- 6. asp.netの実行時に新しいパネルを追加するには
- 7. 実行時にアンドロイドアプリに新しいフィールドを追加する方法
- 8. Java - プロパティ:実行時に新しいキーをプロパティファイルに追加しますか?
- 9. クリック時にオブジェクト配列に新しいデータを追加する
- 10. 実行時にDevExpress GridViewに列にTextEditを追加する
- 11. 実行時に新しい列を追加するにはどうすればよいですか?
- 12. 実行時にネイティブライブラリの新しいパスをJavaで追加する
- 13. 実行時にJavaで新しいクラスを拡張または追加する
- 14. 実行時にjavascript配列にオブジェクトを追加する
- 15. 新しい列を行列に追加するエラー
- 16. 実行時にテーブルに行を追加
- 17. Silverlight DataGrid - 実行時に列を追加する
- 18. 実行時にコントロールを追加すると動作しない
- 19. 新しいコントロールを追加した後に新しい行を追加する
- 20. Xamarin:実行時に.dllファイルを追加してアプリケーションにfunctionnalitiesを追加する
- 21. Infragistics UltraWebGridに新しい行(テンプレート付き列)を追加する
- 22. numpy配列に新しい行を追加する
- 23. XMLファイルの文字列に新しい行を追加する
- 24. 実行時に新しい列を作成するSQLクエリ
- 25. 実行時にファイルをアプリケーションに追加
- 26. 新しい列を追加した後にテーブルの各行を更新する
- 27. 実行時に動的にグリッドビューに行を追加する
- 28. onclickを追加したり、実行時にデータベースから実行時に作成
- 29. 実行時に行とキーをアンドロイドでカスタムキーボードに追加する
- 30. アニメーションの実行中にタイムラインに新しいKeyFrameを追加