如何在WPF网格中更好地呈现此数据?

时间:2011-03-08 02:27:10

标签: wpf grid

我在WPF网格中提供了一些数据,如下所示:

        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" MinWidth="150"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition MinWidth="200"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Label Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="5" Style="{StaticResource SectionNumber}" Content="1.3"/>
            <Label Grid.Row="1" Grid.Column="0" Margin="5 2">Number of grid in X:</Label>
            <Label Grid.Row="1" Grid.Column="1" Margin="5 2">NX</Label>
            <lib:NumericTextBox Grid.Row="1" Grid.Column="2" Grid.ColumnSpan="2" Margin="5 2" Text="{Binding Parameters.NX}"/>
            <Label Grid.Row="2" Grid.Column="0" Margin="5 2">Number of grid in Y:</Label>
            <Label Grid.Row="2" Grid.Column="1" Margin="5 2">NY</Label>
            <lib:NumericTextBox Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="2" Margin="5 2" Text="{Binding Parameters.NY}"/>
        <Label Grid.Row="3" Grid.Column="0" Margin="5 2">Type of data:</Label>
        <Label Grid.Row="3" Grid.Column="1" Margin="5 2">MD</Label>
        <ComboBox x:Name="cmbMD" Grid.Row="1" Grid.Column="2" Grid.ColumnSpan="2" Margin="5 2" SelectedItem="{Binding Data.MD}"/>
        <Label Grid.Row="4" Grid.Column="0" Margin="5 2">Data value:</Label>
        <Label Grid.Row="4" Grid.Column="1" Margin="5 2">D</Label>
        <TextBox Grid.Row="4" Grid.Column="2" Margin="5 2" Text="{Binding Data.D}"/>
        <TextBox Grid.Row="4" Grid.Column="3" Margin="5 2" Text="{Binding Unit.LengthUnit, Mode=OneWay}" IsReadOnly="True" />
...

问题是我有数百行要写。在WinForms中,我可能会编写一个用户控件来呈现一行数据,我只需要一行代码来创建一行。

我如何在这里简化它? DataTemplate能以某种方式提供帮助吗?我知道我可以在列表框中使用DataTemplate来简化它。但是,我需要将列垂直对齐,所以我认为Grid是唯一的方法,对吧?

2 个答案:

答案 0 :(得分:1)

听起来你想要的是DataGrid,而不是Grid

答案 1 :(得分:1)

WPF ListView或DataGrid是要走的路。

我正在为您编写一个简单的DataGrid XAML。

<DataGrid ItemsSource="{Binding YourCollection}" >
 <DataGrid.Columns>
    <DataGridTemplateColumn Header="YourColumnHeader1" >
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                 <Label Content="{Binding Property1}" />
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>

   <DataGridTemplateColumn Header="YourColumnHeader2" >
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                 <lib:NumericTextBox Text="{Binding Property2}" />
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>

 </DataGrid.Columns>
</DataGrid>