2013-02-19 17 views
14

czy ktoś wie, jaka jest "nowa droga" FindAncestor w powiązaniach XAML? Patrząc na RelativeSourceMode (http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.data.relativesourcemode), istnieją tylko opcje umożliwiające odniesienie do siebie lub TemplatedParent. FindAncestor już nie ma. Chciałbym wiedzieć, dlaczego i jakie są typowe rozwiązania problemów, które naprawiłem przy użyciu FindAncestor.WinRT (Win 8) Store App Wiązania XAML RelativeSourceMode Brak FindAncestor?

poważaniem Gope

+5

Zgoda, to jest ciężkie. – Mic

Odpowiedz

14

Dlaczego brakuje? Nie mam pojęcia, ale wątpię, by było inne wytłumaczenie niż "Microsoft nie miał wystarczająco dużo czasu, aby zaimplementować wszystkie funkcje w czasie".

Łatwym obejście jest użycie ElementName zamiast, jak w:

Binding={ ElementName=TheNameOfTheAncesor, Path=DataContext.TheViewModelProperyIWantToBindTo } 

I dodać x: Imię atrybut do przodka chciałeś swoją wiążące FindAncestor aby wskazać:

<TextBlock x:Name="TheNameOfTheAncestor" /> 
+2

Tak, brakuje ... :) ElementName działa w prostych scenariuszach, ale nie, jeśli znajduje się w ControlTemplate, ponieważ nazwy ElementNames są różne dla każdego szablonu. – Gope

+1

To był mój trzeci "Microsoft nie miał wystarczająco dużo czasu, aby zaimplementować wszystkie funkcje" problem w dwa dni. Dziękuję panu, to mi się udało. –

+0

jeśli jest to XAML, uważam, że naprawdę powinno to być '{Binding ElementName = ...}' zamiast 'Binding = {Elementname = ...} – dlatikay

4

nie ma ogólnego rozwiązania dla tego braku AFAIK, na przykład nie można uzyskać dostępu ListViewItem właściwości w DataTemplate więc nie można reagować na sel ect zmienia się elegancko. Powinieneś znaleźć obejście dla każdego konkretnego przypadku, aż do dodania FindAncestor (nie mogę uwierzyć, że ta nieobecność nie jest tylko ze względu na brak czasu)

Powiązane problemy