2009-05-27 6 views
4

In WPF habe ich ein Raster mit einer Anzahl von definierten Spalten und die Breite jeder Spalte auf die Breite eines Datenraster Säule gebunden ist, etwa so:Wie kann ich WPF-Spaltenbreite im Code binden?

<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="{Binding ElementName=dataGrid, Path=RowHeaderWidth}" /> 
    <ColumnDefinition Width="{Binding ElementName=Column0, Path=ActualWidth}" /> 
    <ColumnDefinition Width="{Binding ElementName=Column1, Path=ActualWidth}" /> 
    Etc. 

<Controls:DataGrid BorderBrush="White" ItemsSource="{Binding DataTable}" 
        Name="datagrid1" Grid.Row="2" RowHeaderWidth="0"> 

    <Controls:DataGrid.Columns> 
    <Controls:DataGridTextColumn Header="Included" Width="50" x:Name="Column0" /> 
    <Controls:DataGridTextColumn Header="First" Width="100" x:Name="Column1" /> 
    Etc. 

Wenn ich das Programm ausführen und die Größe manuell die Spalten , Kann ich die Größe der Grid-Spalten sehen (ShowGridLines = true) und Elemente, die an bestimmte Grid-Spalten gebunden sind, werden entsprechend verschoben.

Wenn ich jedoch versuche, die Datenraster- und Rasterspalten im Code hinzuzufügen, kann ich die Bindung nicht zum Funktionieren bringen (keine verbindlichen Fehler). Hier ein Beispiel:

binding = new Binding() 
{ 
    Source = dataGrid.Columns[col], 
    Path = new PropertyPath("ActualWidth"), 
    Mode = BindingMode.OneWay, 
}; 

colDef.SetBinding(WidthProperty, binding); 

ich andere Variationen versucht haben (zB Elementname = „DataGridColumn1“, Pfad = new PropertyPath („Actual“), aber bekommen entweder keine Fehler (und keine Bindung) oder eine ‚nicht Quelle finden . ‚Fehler oder eine Binding Wegfehlers für die Bindung

Es muss einen Weg geben die Bindung in Code zu setzen ...

Antwort

6

ich fand die Antwort Diese Zeile:.

colDef.SetBinding(WidthProperty, binding); 
colDef.SetBinding(ColumnDefinition.WidthProperty, binding); 
0
DataGridTextColumn textColumn = new DataGridTextColumn(); 
textColumn.Width = DataGridLength.SizeToHeader; 

Google DataGridLength, um andere Optionen ....

0

In meinem Projekt ich so tun - dachte, es sei erwähnenswert, da ich viel hatte:sollte geändert werden Probleme, die es funktionieren lassen, bevor ich es bekam:

DataGridTextColumn c = new DataGridTextColumn 
    { 
      // Binding to my value (not directly related to the question) 
      Binding = new Binding 
      { 
       Path = new PropertyPath(cd.Title + ".Value"), 
       Mode = BindingMode.TwoWay 
      } 
    }; 

    // Binding the width 
    BindingOperations.SetBinding(c, DataGridTextColumn.WidthProperty, new Binding 
    { 
      Source = cd,      // An INotifying object 
      Path = new PropertyPath("Width"), // A Property of that object 
      Mode = BindingMode.TwoWay 
     }); 
Verwandte Themen