简体   繁体   中英

WPF binding in XAML to C# in grid columndefenition

So I have written Xaml code to make a datagrid with a grid above it, to have a multi-header. Now, I want to dynamically generate the grid, but I've used bindings in the Width propperty of the ColumnDefenition ... And I have no clue on how to convert this to C#

This is what I have in Xaml:

<StackPanel Grid.Row="2" Margin="0,30" x:Name="print_content">

    <TextBlock x:Name="txt_selected_class" Text="KLASSE HIER" />

    <!--Here will the result come-->
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="{Binding ElementName=pos, Path=ActualWidth, Mode=OneWay}"/>
            <ColumnDefinition Width="{Binding ElementName=Nr, Path=ActualWidth, Mode=OneWay}"/>
            <ColumnDefinition Width="{Binding ElementName=pilot, Path=ActualWidth, Mode=OneWay}"/>
            <ColumnDefinition Width="{Binding ElementName=pilot_club, Path=ActualWidth, Mode=OneWay}"/>
            <ColumnDefinition Width="{Binding ElementName=pilot_license, Path=ActualWidth, Mode=OneWay}"/>
            <ColumnDefinition Width="{Binding ElementName=navigator, Path=ActualWidth, Mode=OneWay}"/>
            <ColumnDefinition Width="{Binding ElementName=navigator_club, Path=ActualWidth, Mode=OneWay}"/>
            <ColumnDefinition Width="{Binding ElementName=navigator_license, Path=ActualWidth, Mode=OneWay}"/>
            <ColumnDefinition Width="{Binding ElementName=part_1_tot_gtk, Path=ActualWidth, Mode=OneWay}"/>
            <ColumnDefinition Width="{Binding ElementName=part_1_tot_timecontrol, Path=ActualWidth, Mode=OneWay}"/>
            <ColumnDefinition Width="{Binding ElementName=part_1_tot_control, Path=ActualWidth, Mode=OneWay}"/>
            <ColumnDefinition Width="{Binding ElementName=part_1_distance, Path=ActualWidth, Mode=OneWay}"/>
            <ColumnDefinition Width="{Binding ElementName=part_2_tot_gtk, Path=ActualWidth, Mode=OneWay}"/>
            <ColumnDefinition Width="{Binding ElementName=part_2_tot_timecontrol, Path=ActualWidth, Mode=OneWay}"/>
            <ColumnDefinition Width="{Binding ElementName=part_2_tot_control, Path=ActualWidth, Mode=OneWay}"/>
            <ColumnDefinition Width="{Binding ElementName=part_2_distance, Path=ActualWidth, Mode=OneWay}"/>
            <ColumnDefinition Width="{Binding ElementName=end_tot_gtk, Path=ActualWidth, Mode=OneWay}"/>
            <ColumnDefinition Width="{Binding ElementName=end_tot_dist, Path=ActualWidth, Mode=OneWay}"/>
            <ColumnDefinition Width="{Binding ElementName=end_tot_points, Path=ActualWidth, Mode=OneWay}"/>
        </Grid.ColumnDefinitions>

        <Label Grid.ColumnSpan="5" Grid.Column="8" Content="Deel 1" Style="{StaticResource DGHeaderStyle}" />
        <Label Grid.ColumnSpan="5" Grid.Column="12" Content="Deel 2" Style="{StaticResource DGHeaderStyle}" BorderThickness="1,0,0,0" BorderBrush="AliceBlue" />
        <Label Grid.ColumnSpan="3" Grid.Column="16" Content="Eind" Style="{StaticResource DGHeaderStyle}" BorderThickness="1,0,0,0" BorderBrush="AliceBlue" />
    </Grid>

    <DataGrid x:Name="list_results" IsReadOnly="True" Grid.Row="1" ColumnHeaderStyle="{StaticResource HeaderStyle}" ColumnWidth="Auto" RowBackground="Transparent" Foreground="#fafafa" AlternatingRowBackground="#555a62" Background="Transparent" BorderThickness="0" AutoGenerateColumns="False" RowHeaderWidth="0" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto">
        <DataGrid.Columns>
            <DataGridTextColumn x:Name="pos" Header="Pos" />
            <DataGridTextColumn x:Name="Nr" Header="Nr" Binding="{Binding team_number}" />
            <DataGridTextColumn x:Name="pilot" Header="Naam piloot" Binding="{Binding team_data.pilot.firstname}" />
            <DataGridTextColumn x:Name="pilot_club" Header="Club" Binding="{Binding team_data.pilot.club}" />
            <DataGridTextColumn x:Name="pilot_license" Header="Licentie" Binding="{Binding team_data.pilot.license}" />
            <DataGridTextColumn x:Name="navigator" Header="Naam copiloot" Binding="{Binding team_data.navigator.firstname}" />
            <DataGridTextColumn x:Name="navigator_club" Header="Club" Binding="{Binding team_data.navigator.club}" />
            <DataGridTextColumn x:Name="navigator_license" Header="Licentie" Binding="{Binding team_data.navigator.license}" />
            <DataGridTextColumn x:Name="part_1_tot_gtk" Header="Totaal GTK's" Binding="{Binding team_data.navigator.license}" HeaderStyle="{StaticResource ColumnHeaderRotateStyle}" />
            <DataGridTextColumn x:Name="part_1_tot_timecontrol" Header="Totaal tijdscontroles" Binding="{Binding team_data.navigator.license}" HeaderStyle="{StaticResource ColumnHeaderRotateStyle}" />
            <DataGridTextColumn x:Name="part_1_tot_control" Header="Totaal controles" Binding="{Binding team_data.navigator.license}" HeaderStyle="{StaticResource ColumnHeaderRotateStyle}" />
            <DataGridTextColumn x:Name="part_1_distance" Header="Afstand" Binding="{Binding team_data.navigator.license}" HeaderStyle="{StaticResource ColumnHeaderRotateStyle}" />
            <DataGridTextColumn x:Name="part_2_tot_gtk" Header="Totaal GTK's" Binding="{Binding team_data.navigator.license}" HeaderStyle="{StaticResource ColumnHeaderRotateStyle}" />
            <DataGridTextColumn x:Name="part_2_tot_timecontrol" Header="Totaal tijdscontroles" Binding="{Binding team_data.navigator.license}" HeaderStyle="{StaticResource ColumnHeaderRotateStyle}" />
            <DataGridTextColumn x:Name="part_2_tot_control" Header="Totaal controles" Binding="{Binding team_data.navigator.license}" HeaderStyle="{StaticResource ColumnHeaderRotateStyle}" />
            <DataGridTextColumn x:Name="part_2_distance" Header="Afstand" Binding="{Binding team_data.navigator.license}" HeaderStyle="{StaticResource ColumnHeaderRotateStyle}" />
            <DataGridTextColumn x:Name="end_tot_gtk" Header="Totaal GTK" Binding="{Binding team_data.navigator.license}" HeaderStyle="{StaticResource ColumnHeaderRotateStyle}" />
            <DataGridTextColumn x:Name="end_tot_dist" Header="Totaal Afstand" Binding="{Binding team_data.navigator.license}" HeaderStyle="{StaticResource ColumnHeaderRotateStyle}" />
            <DataGridTextColumn x:Name="end_tot_points" Header="Totaal" Binding="{Binding team_data.navigator.license}" HeaderStyle="{StaticResource ColumnHeaderRotateStyle}" />
        </DataGrid.Columns>
    </DataGrid>

</StackPanel>

Now, That works as it should, but in my C# I have this;

private void LayoutPartOne(string klasse)
{
    // Add the class name to the document
    TextBlock txt_selected_class = new TextBlock()
    {
        Text = klasse + "(" + inp_tour_part.Text + ")"
    };

    // Initiate the new grid
    Grid grid = new Grid();

    // Add al the column defenitions
    ColumnDefinition pos = new ColumnDefinition();
    pos.Width = 

}

The pos.Width = is not filled in further, since I totally don't have an idea on how to add the {Binding ElementName=pos, Path=ActualWidth, Mode=OneWay} from the Xaml... Any ideas? Or solutions to this?

The programmatic equivalent of this XAML:

<ColumnDefinition Width="{Binding ElementName=pos, Path=ActualWidth, Mode=OneWay}"/>

...would be this:

ColumnDefinition cd = new ColumnDefinition();
BindingOperations.SetBinding(cd, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = pos, Mode = BindingMode.OneWay });

Looking through the MSDN code, you should be able to find an example of howto create binding in code, https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/how-to-create-a-binding-in-code An example would be like this

// Make a new source.
MyData myDataObject = new MyData(DateTime.Now);      
Binding myBinding = new Binding("MyDataProperty");
myBinding.Source = myDataObject;
// Bind the new data source to the myText TextBlock control's Text dependency property.
myText.SetBinding(TextBlock.TextProperty, myBinding);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM