個人的に私は非常にDataGridのを好まないように、それは動的なシナリオでデータグリッドを作成するのに役立ちます。はい、バインドするのが簡単ですし、組み込みのサイズ変更と並べ替えのオプションが用意されていますが、ObjectsControlほど柔軟ではありません。私自身を説明させてください。
私はItemsControlにObservableCollectionを設定する傾向があります。次に、ItemsControlにカスタムアイテムを表示する方法を伝えるためにDataTemplateを使用します。
MVVMを実行している場合、CustomObjectsはModelesオブジェクトにすることができます。 リストがObservableCollectionにバインドされている場合、追加されたアイテムと削除されたアイテムがリストに動的に表示されます。 列サイズでは、グリッドをGridColumnsの幅を一部の列の固定幅に、*を他の列の幅に指定することで、残りの領域を埋めることができます。
GridViewの代替方法 私はItemControlの周りにScrollViewerを使用しているので、ItemsControlが大きすぎる場合はスクロールすることができます。 ItemsControlのItemSourceはFireAlarmのObservableCollectionにバインドされています。 ItemsControlのWrapPanelには各DataTemplateが含まれます。それは(あなたがするかどうかの祖先)幅が
<ScrollViewer
Grid.Row="x"
Grid.Column="y"
VerticalScrollBarVisibility="Auto"
Margin="5">
<ItemsControl
BorderBrush="DarkBlue"
BorderThickness="2"
ItemsSource="{Binding Path=FireAlarms}"
ItemTemplate="{StaticResource FireAlarmsTemplate}"
>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel
Orientation="Horizontal"
Width="{Binding RelativeSource=
{RelativeSource FindAncestor,
AncestorType={x:Type ItemsControl}},
Path=ActualWidth}"
>
</WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
[OK]をItemsControlには、あなたがたDataTemplateを必要としている彼の親にバインドされます。 DataTemplateは、ウィンドウのressourceまたはDataDictionnaryに配置できます。あなたはクラスを持って言うことができます:ここで
FireAlarm
{
Public String AlarmInfo1;
Public String AlarmInfo2;
Public String AlarmInfo3;
}
で始まるのに良いのDataTemplateのようになります。
<DataTemplate x:Key="FireAlarms">
<Border
BorderBrush="SteelBlue"
Background="LightBlue"
BorderThickness="2"
Margin="10"
Padding="10">
<StackPanel
Orientation="Vertical"
>
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="5"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Label
Grid.ColumnSpan="3"
Grid.Row="0"
Content="{Binding Path=AlarmName}"
Margin="5,-5,5,10"
FontWeight="Bold"
FontSize="16"
HorizontalContentAlignment="Center"
HorizontalAlignment="Center">
</Label>
<TextBlock
Text="Alarm information 1" Grid.Row="1" Grid.Column="0" />
<TextBox
Text="{Binding Path=AlarmInfo1}"
Grid.Column="2"
Grid.Row="1"
>
</TextBox>
<TextBlock
Text="Alarm information 2" Grid.Row="2" Grid.Column="0" />
<TextBox
Text="{Binding Path=AlarmInfo2}"
Grid.Column="2"
Grid.Row="2"
>
</TextBox>
<TextBlock
Text="Alarm information 3" Grid.Row="3" Grid.Column="0" />
<TextBox
Text="{Binding Path=AlarmInfo3}"
Grid.Column="2"
Grid.Row="3"
>
</TextBox>
</Grid>
</StackPanel>
</Border>
</DataTemplate>
[OK]を、私はこれがあなたのために便利であると思います。私のテンプレートは1アラームあたり1平方メートルを生成します。 GridViewのようなテーブルに入れたいのであれば、縦向きのスタックパネルを使ってこれを修正し、変数//可変な列幅のグリッドを使うことができますが、何か有用なものを求めたので、何かと一緒に楽しい!
お楽しみください!
出典
2011-06-28 20:32:17
Gab
WPFのすべては、少なくとも10倍以上複雑になっているようです。 –