Tomasz M.

Tomasz M. never go full
retard!

Temat: Bindowanie List<dynamic> do DataGrid

Nie mogę sobie poradzić z jedną rzeczą, otóż mam swój ViewModel, który w skrócie wygląda tak...


internal class LDAPViewModel
{
private List<dynamic> _ResultsList;
public ReadOnlyObservableCollection<dynamic> Results
{
get
{
_ResultsList = BindLDAPResult(LDAP.GetValueDictionary(Filters, modelProperties)).ToList();
return new ReadOnlyObservableCollection<dynamic>(new ObservableCollection<dynamic>(_ResultsList));
}
}
}


I próbuję bindować Result do DataGrida.

<DataGrid x:Name="dataGrid" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" Grid.RowSpan="2" AutoGenerateColumns="true" BorderThickness="0 0 1 0" BorderBrush="DarkGray" diag:PresentationTraceSources.TraceLevel="High">
</DataGrid>

... kodem w konstruktorze ...

public MainWindow()
{
LDAPViewModel = new ViewModel.LDAPViewModel(LDAP, "sn;displayName");
LDAPViewModel.Filters.Add("objectclass", "user");
InitializeComponent();
dataGrid.ItemsSource = LDAPViewModel.Results;
}



I o ile ilość wierszy się mniej -więcej zgadza, to nie generowane są kolumny, a próbowałem już kilkudziesięciu rzeczy z tą kolekcją.

Potraficie pomóc?

PS. Nie chcę silnie typowanego obiektu, bo kolekcja zawiera typ, który za każdym razem generowany jest dynamicznie poprzez refleksję.
Borysław B.

Borysław B. Mgr inżynier
informatyki,
właściciel Matrix
Reliability

Temat: Bindowanie List<dynamic> do DataGrid

A tak zadziała?


<DataGrid x:Name="dataGrid" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" Grid.RowSpan="2" AutoGenerateColumns="true" BorderThickness="0 0 1 0" BorderBrush="DarkGray" diag:PresentationTraceSources.TraceLevel="High" ItemsSource="{Binding}">
</DataGrid>

...

dataGrid.DataContext = LDAPViewModel.Results;
Tomasz M.

Tomasz M. never go full
retard!

Temat: Bindowanie List<dynamic> do DataGrid

Borysław Bobulski:
A tak zadziała?

Nope, to samo. Dostaję wygenerowane wiersze, ale brak jest kolumn.
Borysław B.

Borysław B. Mgr inżynier
informatyki,
właściciel Matrix
Reliability

Temat: Bindowanie List<dynamic> do DataGrid

Jeślibyś miał stałą ilość kolumn to może warto byłoby spróbować z AutoGenerateColumns="False" i coś w tym stylu...


<DataGrid x:Name="dataGrid" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" Grid.RowSpan="2" BorderThickness="0 0 1 0" BorderBrush="DarkGray" diag:PresentationTraceSources.TraceLevel="High" ItemsSource="{Binding}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="First Name"
Binding="{Binding FirstName}" />
<DataGridTextColumn Header="Last Name"
Binding="{Binding LastName}" />
<DataGridTextColumn Header="Age" Width="50"
Binding="{Binding Age}" />
<DataGridCheckBoxColumn Header="Available"
Binding="{Binding Available}" />
</DataGrid.Columns>
</DataGrid>


No chyba, że nie wiadomo jakie mają być kolumny
Tomasz M.

Tomasz M. never go full
retard!

Temat: Bindowanie List<dynamic> do DataGrid

Borysław Bobulski:
No chyba, że nie wiadomo jakie mają być kolumny

No właśnie ;)
Borysław B.

Borysław B. Mgr inżynier
informatyki,
właściciel Matrix
Reliability

Temat: Bindowanie List<dynamic> do DataGrid

Hm... A testowałeś, czy udaje Ci się uzyskać kolumny, gdyby zadeklarować je tymczasowo na stałe?
Marcin Pasternak

Marcin Pasternak Programista .NET, C#

Temat: Bindowanie List<dynamic> do DataGrid

Podnoszone jest zdarzenie AutoGeneratingColumn?
Tomasz M.

Tomasz M. never go full
retard!

Temat: Bindowanie List<dynamic> do DataGrid

Borysław Bobulski:
Hm... A testowałeś, czy udaje Ci się uzyskać kolumny, gdyby zadeklarować je tymczasowo na stałe?

Tak, alk rzuca wtedy wyjątkiem jakimś albo nie potrafię zbindować poprawnie ;)

Marcin Pasternak:
Podnoszone jest zdarzenie AutoGeneratingColumn?

No właśnie nie. Za to AutoGeneratedColumns jest, ale to chyba by design.Tomasz M. edytował(a) ten post dnia 17.10.12 o godzinie 12:54
Borysław B.

Borysław B. Mgr inżynier
informatyki,
właściciel Matrix
Reliability

Temat: Bindowanie List<dynamic> do DataGrid

Jako gumowa kaczka - sugeruję, jeśli mogę oczywiście, metodę małych kroczków. Sprawić najpierw żeby zadziałało z kolumnami sztywno. Wtedy pozostanie tylko kolejny kroczek do AutoGeneratedColumns.

edit:
Jakiś sensowny wyjątek?Borysław Bobulski edytował(a) ten post dnia 17.10.12 o godzinie 13:29
Tomasz M.

Tomasz M. never go full
retard!

Temat: Bindowanie List<dynamic> do DataGrid

Borysław Bobulski:
Jako gumowa kaczka - sugeruję, jeśli mogę oczywiście, metodę małych kroczków. Sprawić najpierw żeby zadziałało z kolumnami sztywno. Wtedy pozostanie tylko kolejny kroczek do AutoGeneratedColumns.

Napisałem obok derugi wg. książki, ale ze zdefiniowaną klasą i kolumnami na sztywno, oczywiście działa.
edit:
Jakiś sensowny wyjątek?

Coś z bindowaniem, ale zupełnie dla mnie niezrozumiały (każe wyczyścić ItemsSource ??)Tomasz M. edytował(a) ten post dnia 17.10.12 o godzinie 13:44
Borysław B.

Borysław B. Mgr inżynier
informatyki,
właściciel Matrix
Reliability

Temat: Bindowanie List<dynamic> do DataGrid

Taki?
Items collection must be empty before using ItemsSource.

A jak wstawisz jakiś template dla kolumn to pomoże?


<DataGrid x:Name="dataGrid" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" Grid.RowSpan="2" BorderThickness="0 0 1 0" BorderBrush="DarkGray" diag:PresentationTraceSources.TraceLevel="High" ItemsSource="{Binding}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGrid.Columns>
</DataGrid>
Tomasz M.

Tomasz M. never go full
retard!

Temat: Bindowanie List<dynamic> do DataGrid

Borysław Bobulski:
Taki?
Items collection must be empty before using ItemsSource.

A jak wstawisz jakiś template dla kolumn to pomoże?

Generuje kolumnę, ale nie binduje danych. No ale to zrozumiałe, bo zdefiniowałem kolumnę. Zależy mi bardziej na tym, żeby sobie sam wygenerował :)Tomasz M. edytował(a) ten post dnia 17.10.12 o godzinie 14:17
Marcin Pasternak

Marcin Pasternak Programista .NET, C#

Borysław B.

Borysław B. Mgr inżynier
informatyki,
właściciel Matrix
Reliability

Temat: Bindowanie List<dynamic> do DataGrid

I działa Ci to?
Tomasz M.

Tomasz M. never go full
retard!

Temat: Bindowanie List<dynamic> do DataGrid

Borysław Bobulski:
I działa Ci to?

Jeszcze nie klepnąłem. Jutro w robocie zaimplementuję, ale wygląda sensownie, choć nie do końca to co chciałęm osiągnąć - ale lepsze to niż nic.

Btw. Marcin, dzięki za wygoogle'anie.

Podobne tematy


Następna dyskusja:

Bindowanie resources z XAML




Wyślij zaproszenie do