mam UserControlViewModel
który wywołuje zdarzenie:Gdzie dostęp DataContext w WinRT XAML UserControl
public event EventHandler<EventArgs> StuffDone;
Przedmiotem UserControlViewModel
jest tworzony i inicjowany wewnątrz MainPageViewModel
:
this.userControlViewModel = new UserControlViewModel();
MainPageViewModel
jest widok -Model dla MainPage
.
W MainPage.xaml, mam następujący kod do umieszczenia UserControlView
UserControl
w MainPage
i zainicjować jego DataContext
:
<views:UserControlView DataContext="{Binding userControlViewModel, Mode=OneWay}" IsHitTestVisible="False"></views:UserControlView>
tej pory wszystko działa bez zarzutu.
Teraz chciałbym subskrybować wydarzenie StuffDone
wewnątrz UserControlView
. Pierwszą rzeczą, która przyszła mi do głowy to zrobienie tego wewnątrz Loaded
event-handler z UserControlView
; jednak w tym momencie DataContext
jest nadal null
. Skanowanie reszty zdarzeń nie dało mi żadnej wskazówki.
Więc, gdzie jest właściwe miejsce, aby uzyskać DataContext
i zapisać się na jego wydarzenia?
Z góry dziękuję.
Bolesne. Brak zdarzenia i żadnych nadpisujących metadanych w właściwości zależności DataContext. Idź do domu, Microsoft, jesteś pijany. Ten facet ma rozwiązanie tutaj: http://dotneteers.net/blogs/vbandi/archive/2013/01/23/datacontextchanged-event-for-winrt.aspx Hacky. – Will
Zrobiłem to wcześniej i to działa dobrze dla mnie. Ale użyłem "Mode = TwoWay". W załadowanym zdarzeniu UserControl, mogę uzyskać dostęp do ViewModel (oczywiście musisz rzucić DataCotext do swojego ViewModel, aby uzyskać do niego dostęp) – SachiraChin
@ Co, co zrobiłeś? co zasugerował [Will] (http://stackoverflow.com/users/1228/will)? Jeśli jest coś innego, czy możesz podać przykład tego, co zrobiłeś? – TheBlueSky