Wie Sie dynamisch hinzufügen eine converter im code-behind
Ich bin das Binden eines Datagrid-Steuerelements auf dynamische Daten über IDictionary: http://www.scottlogic.co.uk/blog/colin/2009/04/binding-a-silverlight-datagrid-to-dynamic-data-via-idictionary/comment-page-1/#comment-8681
Aber ich will nicht zu definieren Spalten in der xaml (unten ist, wie es getan wird, Colin Eberhardt ' s post
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="Forename" Binding="{Binding Converter={StaticResource RowIndexConverter}, ConverterParameter=Forename}" />
</data:DataGrid.Columns>
So, ich habe geschrieben das folgenden code, um zu versuchen und tun die gleiche Sache in der code-behind, aber der code funktioniert nicht rufen Sie die RowIndexConverter. Muss etwas fehlen.
Code:
//add columns
DataGridTextColumn textColumn = new DataGridTextColumn();
textColumn.Header = "Forename";
Binding bind = new Binding("Forename");
bind.Converter = new RowIndexConverter() ;
bind.ConverterParameter = "Forename";
textColumn.Binding = bind;
_dataGrid.Columns.Add(textColumn);
Rest des Codes (hier für den Zusammenhang):
//generate some dummy data
Random rand = new Random();
for (int i = 0; i < 200; i++)
{
Row row = new Row();
row["Forename"] = s_names[rand.Next(s_names.Length)];
row["Surname"] = s_surnames[rand.Next(s_surnames.Length)];
row["Age"] = rand.Next(40) + 10;
row["Shoesize"] = rand.Next(10) + 5;
_rows.Add(row);
}
//bind to our DataGrid
_dataGrid.ItemsSource = _rows;
public class Row
{
private Dictionary<string, object> _data = new Dictionary<string, object>();
public object this[string index]
{
get
{
return _data[index];
}
set
{
_data[index] = value;
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Konverter wird aufgerufen, nachdem die Daten durch die Eigenschaft der Pfad. Da es keine "Vorname" - Eigenschaft in der Zeile, funktioniert es nicht (sehen Sie die Verbindliche Ausnahme in der Ausgabe-Fenster).
Ich löste es, indem Sie die Verbindliche definition zu:
da Sie nicht zwei-Wege-Bindung ohne Pfad (die Ausnahme bekam ich ohne die zweite Zeile).
Da Sie keine Eigenschaft der Pfad sinnvoll ist, auf den zweiten Gedanken, wie wir wollen, zu binden, um die ganze Zeile Objekt, nicht eine seiner Eigenschaften.
Hinweis: getestet mit VS 2008 SP1, WPF-Projekt.