Chcę dodać wiersz przy użyciu danych z ExpandoObject
, który jest podobny do Dictionary<string, object>
. string
jest nagłówkiem kolumny, a wartość object
jest wartością kolumny. Za każdym razem, gdy otrzymuję nowe dane, tworzę nowy GridView
, ponieważ liczba kolumn może być inna. W List
myItems są wszystkie wiersze Dictionary<string, object>
, które chcę pokazać w moim widoku.Dodaj kolumnę do listy zawierającej obraz
ten sposób mogę dodać kolumny do mojego widoku:
List<Column> columns = new List<Column>();
myItemValues = (IDictionary<string, object>)myItems[0];
// Key is the column, value is the value
foreach (var pair in myItemValues)
{
Column column = new Column();
column.Title = pair.Key;
column.SourceField = pair.Key;
columns.Add(column);
}
view.Columns.Clear();
foreach (var column in columns)
{
Binding binding = new Binding(column.SourceField);
if (column.SourceField == "Icon")
{
view.Columns.Add(new GridViewColumn
{
Header = column.Title,
DisplayMemberBinding = binding,
CellTemplate = new DataTemplate(typeof(Image))
});
}
else
{
view.Columns.Add(new GridViewColumn { Header = column.Title, DisplayMemberBinding = binding });
}
}
bezpośrednie po tym staram się dodać wiersze:
foreach (dynamic item in myItems)
{
this.listView.Items.Add(item);
}
tryed zmodyfikować ten solution dla innych celów. To rozwiązanie działa bardzo dobrze, jeśli tylko chcesz dodać wartości typu string
, ale teraz chcę też wyświetlać image
w GridView, ale jeśli dodasz do mojego GridView, to pokazuje mi tylko:
„System.Windows.Controls.Image”
teraz chcę wiedzieć, czy mogę zmodyfikować mojego kodu, tak mogę wyświetlić dowolny typ (lub co najmniej images
i strings
) w gridview czy muszę korzystać z zupełnie nowej drogi i byłby sposób?
EDIT: W poprzednich podejść, mówiło się, że trzeba stworzyć nową DataTemplate
aby wyświetlić obrazek, ale żadne z rozwiązań (Solution 1, Solution 2) znalazłem pracuje dla mnie.
Spróbuj ustawić 'Ce lLTemplate' dla kolumny opartej na typie danych w pętli, w której tworzysz kolumny. Jest tak na wypadek, gdyby jedna kolumna zawsze pokazywała ten sam typ danych. Jeśli typ danych może zmienić się z wiersza na wiersz, można dodać 'CellTemplateSelector', aby użyć odpowiedniego szablonu. – Shadowed
Stworzyłem nowy 'DataTemplate' i ustawiłem' DataType' na 'typeof (Image)'. Czy muszę ustawić więcej właściwości? ponieważ wciąż otrzymuję ten sam rezultat. – daniel59
Wypróbowałem te rozwiązania, aby utworzyć DataTemplate: http://stackoverflow.com/questions/248362/how-do-i-builda-a-datatemplate-in-c-sharpcode i http://stackoverflow.com/questions/5471405/create-datatemplate-in-code-behind, ale żaden z nich nie działa dla mnie. Więc jak mogę utworzyć 'DataTemplate', który zapewnia' obrazy' w 'gridview'? – daniel59