Tomasz Mueller

Tomasz Mueller Software Tester and
Developer

Temat: podpinanie widoku...

Witam,

Mam następującą sytuację:
w aplikacji Silverlightowej(MVVM)
potrzebuję podpiąć widok( z dołączonym viewmodelem) do widoku "nadrzędnego" tak by po kliknięciu na przycisk umieszczony w podpinanym widoku móc skorzystać zarówno z rekordów zaznaczonych na widoku nadrzędnych jak i rekordów zaznaczonych na widoku podpinanym.

Problem polega na tym, że gdy cała logika uruchamiana po kliknięciu jest umieszczona we viewmmodelu widoku nadrzędnego, nie potrafię dostać się do rekordów zaznaczonych na podpinanym widoku, natomiast umieszczenie logiki po stronie podpinanego widoku nie daje dostępu do rekordów zaznaczonych w widoku nadrzędnym.

Czy istnieje jakiś prosty sposób na rozwiązanie takiej sytuacji?
Marcin Pasternak

Marcin Pasternak Programista .NET, C#

Temat: podpinanie widoku...

ViewModel podrzędny powinien wystawiać zaznaczone rekordy jako Properties.
ViewModel nadrzędny powinien posiadać referencje do podrzędnego.
Jerzy M.

Jerzy M. C#/JavaScript
Developer

Temat: podpinanie widoku...

Nie można by tego rozwiązać z wykorzystaniem UserControl przez który można pobrać zaznaczony element? Wtedy ViewModel nadrzędny mógłby mieć do tego dostęp?
Tomasz Mueller

Tomasz Mueller Software Tester and
Developer

Temat: podpinanie widoku...

Marcin Pasternak:
ViewModel podrzędny powinien wystawiać zaznaczone rekordy jako Properties.
ViewModel nadrzędny powinien posiadać referencje do podrzędnego.

Niestety przy takim rozwiązaniu properties zawierający zaznaczone rekordy jest pusty mimo że rekordy są zaznaczone.
Borysław B.

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

Temat: podpinanie widoku...

A properties implementują INotifyPropertyChanged ?
Marcin Pasternak

Marcin Pasternak Programista .NET, C#

Temat: podpinanie widoku...

Tomasz M.:
Marcin Pasternak:
ViewModel podrzędny powinien wystawiać zaznaczone rekordy jako Properties.
ViewModel nadrzędny powinien posiadać referencje do podrzędnego.

Niestety przy takim rozwiązaniu properties zawierający zaznaczone rekordy jest pusty mimo że rekordy są zaznaczone.

1. Wypowiedz Borysława.
2. Możesz w podrzędnym wystawić publicznie ICollectionView collectionView = CollectionViewSource.GetDefaultView(/*twoje dane*/)
ICollectionView ma Properties CurrentItem,
jako źródło danych w podrzędnym użyć collectionView
Jeśli bindujesz do DataGrid ustaw IsSynchronizedWithCurrentItem="True", ale jeśli użyjesz ICollectionView to powinno działać bez tego ustawienia

Przy bindowaniu możesz też posłużyć się w taką konstrukcją z "/" który wskazuje na aktualnie wybrany elementView1

<ListBox
ItemsSource="{Binding Persons}"
IsSynchronizedWithCurrentItem="True"/>

View2

<ListBox Grid.Column="1"
ItemsSource="{Binding Persons/Child}"
IsSynchronizedWithCurrentItem="True"/>
Marcin Pasternak edytował(a) ten post dnia 18.10.12 o godzinie 17:34



Wyślij zaproszenie do