2015-02-03 13 views
5

Jestem tutaj naprawdę zdezorientowany.DataGrid SelectedItem nie aktualizuje się

Utworzyłem datagrid, związałem jego itemource dwukierunkowo i związałem jego wybrany element dwukierunkowo. Wybrany item getter zostaje wywołany, ale setter nigdy tego nie robi. Wszystkie kawałki wydają się tu być. czego mi brakuje?

<DataGrid ItemsSource="{Binding Properties ,Mode=TwoWay}" 
        SelectedItem="{Binding SelectedProperty ,Mode=TwoWay}" 
        CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False" Background="LightBlue"> 

    <DataGrid.Columns> 
     <DataGridTextColumn IsReadOnly="True" Header="Address" Binding="{Binding Address}"/> 
    </DataGrid.Columns> 
    <DataGrid.RowDetailsTemplate> 
    <DataTemplate> 
     <DataGrid ItemsSource="{Binding Units ,Mode=TwoWay}" 
        SelectedItem="{Binding SelectedUnit, Mode=TwoWay}" 
        CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False"> 

Mój pierwszy datagrid działa poprawnie, w tym wybrany element.

Druga trzecia i czwarta zagnieżdżona siatka nie wiążą się jednak z wybranym elementem. Źródła elementów działają, ale to jest to, że nie ma żadnych błędów w wyrażeniach wiązania ani żadnych innych błędów wyświetlanych w oknie wyników.

+1

I omijana mój problem z użyciem dwóch 'ItemsControl' dla mojego siatki, a niektóre dla 'RowHeader' i' ColumnHeader'. Nadal byłby nieprzyjemny, jeśli istnieje sposób, aby to zrobić z 'DataGrid' – MadddinTribleD

Odpowiedz

5

Odpowiedź na to jest całkiem oczywista.

zapomniałem umieścić UpdateSourceTrigger = PropertyChanged

tak powinno to wyglądać tak

<DataGrid ItemsSource="{Binding Units ,Mode=TwoWay}" 
     SelectedItem="{Binding SelectedUnit,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
     CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False"> 

To rozwiązało problem

+1

Dzięki, utknąłem na tym przez dwa dni. – Guge

1

wychodził coś podobnego do tego kilka miesięcy temu, z jakiegoś powodu wewnętrzna DataGridItemSource nie był ustawiony prawidłowo stosując w ten sposób udało mi się naprawić poprzez wiązanie za pomocą ElementName ustawić RowDetail DataGridItemSource do SelectedItem w jednostce nadrzędnej:

<DataGrid x:Name="DataGrid" ItemsSource="{Binding Properties ,Mode=TwoWay}" 
        SelectedItem="{Binding SelectedProperty ,Mode=TwoWay}" 
        CanUserDeleteRows="False" CanUserAddRows="False" AutoGenerateColumns="False" Background="LightBlue"> 

    <DataGrid.Columns> 
     <DataGridTextColumn IsReadOnly="True" Header="Address" Binding="{Binding Address}"/> 
    </DataGrid.Columns> 
    <DataGrid.RowDetailsTemplate> 
    <DataTemplate> 
     <DataGrid ItemsSource="{Binding SelectedItem.Units ,Mode=TwoWay,ElementName=DataGrid}" 
+1

tutaj, co ci powiedziałem o http://stackoverflow.com/questions/27131113/rowdetailstemplate-itemsource- binded-to-an-ef-navigationproperty – Usama

+2

Więc to rozwiązanie nie działa i oto dlaczego. Problem nie polega na tym, że zasoby nie są zapełniane. To działa dobrze. Problem polega na tym, że właściwość, do której związany jest wybrany element zagnieżdżonej siatki, nie jest ustawiana. Przetestowałem twoje rozwiązanie, włączając dodanie SelectedItem = {Binding ElementName = PropertiesGrid, Path = SelectedItem, Mode = TwoWay "} Oczywiście, jeśli to zrobię, to może ustawić poprawny wybrany element, ale niszczy on wszelkie próby jego związania. else –

Powiązane problemy