2015-09-29 27 views
6

Podczas używania tradycyjnej składni {Binding} można podać nazwę elementu, aby wskazać konkretny element kontrolny na stronie i móc uzyskać dostęp do jego właściwości. Na przykład, jeśli strona jest nazwany page można zrobić:Alternatywa dla elementu Nazwa w x: powiązanie z DataTemplates

{Binding ElementName=Page, Path=Name} 

ze składnią {x:Bind} mówi

z X: Bind, nie trzeba używać ElementName = xxx jako część wyrażenie wiążące. Za pomocą x: Bind można użyć nazwy elementu jako pierwszej części ścieżki powiązania, ponieważ nazwane elementy stają się polami w obrębie strony lub kontrolką użytkownika reprezentującą źródłowe źródło powiązania.

Tak na powyższym przykładzie w {x: Bind} byłoby

{x:Bind page.Name} 

Które działa dobrze, dopóki nie jest wewnątrz szablonu danych (na przykład ItemTemplate ListView'S). W tym przypadku to nie działa, ponieważ szuka Page na określony typ danych, co prowadzi do następującego błędu (zakładając, że mój typ danych jest customer):

XamlCompiler błąd WMC1110: Nieprawidłowy wiązania ścieżki „Page.Name ': nieruchomość Strona "nie można znaleźć na stronie typu«klient»

co jest rozwiązaniem używać {} x: Bind składni z datatemplates i kontroli dostępu poza szablonem danych?

Przykład Kod jest dostępny here (uwaga specyficzne popełnić)

Odpowiedz

9

O ile wiem, w tej chwili nie ma sposobu, aby bezpośrednio wiążą się z majątku kontroli przy użyciu x: metody wiązania jak to robi nie obsługuje nazwy elementu wewnątrz definicji powiązania.

To nie znaczy, że nie można powiązać z formantem wewnątrz elementu dataTemplate, ale nadal można zrobić coś takiego, aby uzyskać dostęp do formantów, ale nie można po prostu użyć skompilowanej składni wiązania x: Bind.

<DataTemplate x:DataType="local:Customer"> 
    <StackPanel Orientation="Vertical"> 
     <Button Content="{Binding Name, ElementName=page}" /> 
     <TextBlock Text="{x:Bind Title}" /> 
    </StackPanel>   
</DataTemplate> 

Powód błędu, który otrzymujesz, wynika ze sposobu, w jaki szablony danych opierają swoje źródło danych. Powiązanie x: Bind nie może odwoływać się do obiektu kontrolnego, a typ klienta powoduje właściwość lub ścieżkę do strony. Jak pokazano powyżej, jedynym prawdziwym sposobem uzyskiwania dostępu do właściwości sterowania użytkownika poza kontrolą jedynie za pomocą XAML jest powrót do standardowego mechanizmu wiążącego.

Mam nadzieję, że to odpowie na twoje pytanie.