Udostępnij przez


Rozszerzenie składni {Binding}

Uwaga / Notatka

Nowy mechanizm powiązania jest dostępny dla systemu Windows 10, który jest zoptymalizowany pod kątem wydajności i produktywności deweloperów. Zobacz rozszerzenie znaczników {x:Bind}.

Uwaga / Notatka

Aby uzyskać ogólne informacje na temat używania powiązania danych w aplikacji za pomocą {Binding} (oraz pełne porównanie między {x:Bind} i {Binding}), zobacz Dokładne informacje o wiązaniu danych.

Rozszerzenie znaczników {Binding} służy do powiązania właściwości danych z kontrolkami z wartościami pochodzącymi ze źródła danych, takiego jak kod. Rozszerzenie znacznikowe {Binding} jest przekształcane w czasie ładowania pliku XAML na wystąpienie klasy Binding. Ten obiekt powiązania pobiera wartość z właściwości w źródle danych i wypycha ją do właściwości kontrolki. Obiekt powiązania można opcjonalnie skonfigurować tak, aby obserwować zmiany w wartości właściwości źródła danych i aktualizować się na podstawie tych zmian. Można również opcjonalnie skonfigurować do wypychania zmian do wartości kontrolki z powrotem do właściwości źródłowej. Właściwość, która jest obiektem docelowym powiązania danych, musi być właściwością zależności. Aby uzyskać więcej informacji, zobacz Omówienie właściwości zależności.

{Binding} ma taki sam priorytet właściwości zależności jak wartość lokalna, a ustawienie wartości lokalnej w kodzie imperatywnym powoduje usunięcie efektu dowolnego ustawienia {Binding} w znacznikach.

Użycie atrybutu XAML

<object property="{Binding}" .../>
-or-
<object property="{Binding propertyPath}" .../>
-or-
<object property="{Binding bindingProperties}" .../>
-or-
<object property="{Binding propertyPath, bindingProperties}" .../>
Termin Description
propertyPath Ciąg określający ścieżkę właściwości powiązania. Więcej informacji znajduje się w sekcji Ścieżka właściwości poniżej.
bindingProperties propName=value[, propName=value]*
Co najmniej jedna właściwość powiązania określona za pomocą składni pary nazwa/wartość.
propName Nazwa właściwości, którą należy ustawić na obiekcie Binding. Na przykład "Konwerter".
wartość Wartość, na która ma być ustawiona właściwość . Składnia argumentu zależy od właściwości właściwości klasy Binding, którą można ustawić za pomocą poniższej sekcji {Binding} .

Ścieżka właściwości

Ścieżka opisuje właściwość, z którą się wiążesz (właściwość źródłowa). Ścieżka jest parametrem pozycyjnym, co oznacza, że można jawnie użyć nazwy parametru ({Binding Path=EmployeeID}) lub określić go jako pierwszy nienazwany parametr ({Binding EmployeeID}).

Typ Path jest ścieżką właściwości, czyli ciągiem znaków, który odwołuje się do właściwości lub podwłaściwości typu niestandardowego lub typu frameworku. Typ może być, ale nie musi być obiektem DependencyObject. Kroki w ścieżce właściwości są rozdzielane kropkami (.) i można uwzględnić wiele ograniczników w celu przechodzenia kolejnych właściwości podrzędnych. Użyj ogranicznika kropkowego niezależnie od języka programowania używanego do implementowania obiektu powiązanego z.

Na przykład aby powiązać interfejs użytkownika z właściwością first name obiektu pracownika, ścieżka właściwości może mieć wartość "Employee.FirstName". W przypadku powiązania kontrolki elementów z właściwością, która zawiera osoby na utrzymaniu pracownika, ścieżka właściwości może być "Employee.Dependents", a szablon elementu kontrolki elementów zajmie się wyświetlaniem elementów w "Dependents".

Jeśli źródło danych jest kolekcją, ścieżka właściwości może określać elementy w kolekcji według ich pozycji lub indeksu. Na przykład "Teams[0]. Gracze", gdzie literał "[]" otacza "0", który określa pierwszy element w kolekcji.

W przypadku używania powiązania ElementName z istniejącym obiektem DependencyObject można użyć dołączonych właściwości w ramach ścieżki właściwości. Aby uściślić dołączoną właściwość, tak aby pośrednia kropka w dołączonej nazwie właściwości nie została uznana za krok do ścieżki właściwości, umieść nawiasy wokół nazwy dołączonej właściwości kwalifikowanej przez właściciela; na przykład (AutomationProperties.Name).

Obiekt pośredni ścieżki właściwości jest przechowywany jako obiekt PropertyPath w reprezentacji w czasie wykonywania, ale większość scenariuszy nie będzie musiała wchodzić w interakcje z obiektem PropertyPath w kodzie. Zazwyczaj można określić potrzebne informacje o powiązaniu przy użyciu języka XAML.

Aby uzyskać więcej informacji na temat składni ciągu dla ścieżki właściwości, ścieżek właściwości w obszarach funkcji animacji i konstruowania obiektu PropertyPath , zobacz Składnia ścieżki właściwości.

Właściwości klasy Binding, którą można ustawić za pomocą elementu {Binding}

{Binding} jest ilustrowany składnią symboli zastępczych bindingProperties, ponieważ istnieje wiele właściwości odczytu/zapisu Binding, które można ustawić w rozszerzeniu znacznika. Właściwości można ustawić w dowolnej kolejności, z parami propName=value rozdzielonymi przecinkami. Niektóre właściwości wymagają typów, które nie mają konwersji typów, więc wymagają one rozszerzeń znaczników własnych zagnieżdżonych w elemencie {Binding}.

Majątek Description
ścieżki Zobacz sekcję Ścieżka właściwości powyżej.
Konwerter Określa obiekt konwertera, który jest wywoływany przez silnik wiążący. Konwerter można ustawić w znacznikach przy użyciu rozszerzenia znaczników {StaticResource}, aby odwoływać się do tego obiektu ze słownika zasobów.
ConverterLanguage Określa kulturę, która ma być używana przez konwerter. (Jeśli ustawiasz konwerter). Kultura jest ustawiana jako identyfikator oparty na standardach. Aby uzyskać więcej informacji, zobacz ConverterLanguage
Parametr konwertera Określa parametr konwertera, który może być używany w logice konwertera. (Jeśli ustawiasz konwerter). Większość konwerterów używa prostej logiki, która pobiera wszystkie potrzebne informacje z przekazanej wartości do konwersji i nie potrzebuje wartości ConverterParameter . Parametr ConverterParameter jest przeznaczony dla bardziej złożonych implementacji konwerterów, które mają logikę warunkową, która wyłącza to, co jest przekazywane w ConverterParameter. Możesz napisać konwerter, który używa wartości innych niż ciągi, ale jest to nietypowe, zobacz Uwagi w ConverterParameter , aby uzyskać więcej informacji.
Nazwa elementu Określa źródło danych, odwołując się do innego elementu w tej samej konstrukcji XAML, która ma właściwość Name lub atrybut x:Name. Jest to często używane do udostępniania powiązanych wartości lub używania właściwości podrzędnych jednego elementu interfejsu użytkownika w celu udostępnienia określonej wartości dla innego elementu, na przykład w szablonie kontrolki XAML.
FallbackValue Określa wartość do wyświetlenia, gdy nie można rozpoznać źródła lub ścieżki.
Tryb Określa tryb powiązania, jako jedną z następujących wartości: "OneTime", "OneWay" lub "TwoWay". Odpowiadają one stałym nazwom wyliczenia BindingMode . Wartość domyślna to "OneWay". Należy pamiętać, że różni się to od wartości domyślnej dla elementu {x:Bind}, czyli "OneTime".
Źródło względne Określa źródło danych, opisując położenie źródła powiązania względem pozycji elementu docelowego powiązania. Jest to najczęściej używane w powiązaniach w szablonach kontrolek XAML. Ustawianie rozszerzenia znacznikowego {RelativeSource}.
Źródło Określa źródło danych obiektu. W rozszerzeniu znaczników Binding właściwość Source wymaga odwołania do obiektu, takiego jak rozszerzenie znaczników {StaticResource}. Jeśli ta właściwość nie zostanie określona, kontekst danych działających określa źródło. Bardziej typowe jest, aby nie określać wartości źródłowej w pojedynczych powiązaniach, a zamiast tego polegać na udostępnionym obiekcie DataContext dla wielu powiązań. Aby uzyskać więcej informacji, zobacz Szczegółowe powiązanie danych lub DataContext.
TargetNullValue Określa wartość do wyświetlenia, gdy wartość źródłowa jest rozpoznawana, ale jawnie ma wartość null.
UpdateSourceTrigger Określa czas aktualizacji źródła powiązania. Jeśli wartość domyślna nie zostanie określona, będzie to Wartość domyślna.

Uwaga / Notatka

Jeśli konwertujesz znaczniki z {x:Bind} na {Binding}, pamiętaj o różnicach w wartościach domyślnych dla właściwości Mode .

Konwerter, ConverterLanguage i ConverterLanguage są związane ze scenariuszem konwertowania wartości lub typu ze źródła powiązania na typ lub wartość zgodną z właściwością docelową powiązania. Aby uzyskać więcej informacji i przykładów, zobacz sekcję "Konwersje danych" w sekcji Powiązanie danych w głębi systemu.

Uwaga / Notatka

Począwszy od systemu Windows 10 w wersji 1607, platforma XAML udostępnia wbudowany konwerter Boolean na Widoczność. Konwerter mapuje true na Visible i false na Collapsed, aby można było powiązać właściwość Widoczność z wartością Boolean bez tworzenia konwertera. Aby użyć wbudowanego konwertera, minimalna wersja docelowego zestawu SDK aplikacji musi być 14393 lub nowsza. Nie można jej używać, gdy aplikacja jest przeznaczona dla starszych wersji systemu Windows 10. Aby uzyskać więcej informacji na temat wersji docelowych, zobacz Wersja kodu adaptacyjnego.

Źródło, RelativeSource i ElementName określają źródło powiązania, więc wzajemnie się wykluczają.

Wskazówka

Jeśli musisz określić pojedynczy nawias klamrowy dla wartości, na przykład w ścieżce lub ConverterParameter, poprzedź go ukośnikiem odwrotnym: \{. Alternatywnie, należy ująć cały ciąg zawierający nawiasy klamrowe, które należy zescapować, w dodatkowym zestawie cudzysłowów, na przykład ConverterParameter='{Mix}'.

Przykłady

<!-- binding a UI element to a view model -->
<Page ... >
    <Page.DataContext>
        <local:BookstoreViewModel/>
    </Page.DataContext>

    <GridView ItemsSource="{Binding BookSkus}" SelectedItem="{Binding SelectedBookSku, Mode=TwoWay}" ... />
</Page>
<!-- binding a UI element to another UI element -->
<Page ... >
    <Page.Resources>
        <local:S2Formatter x:Key="GradeConverter"/>
    </Page.Resources>

    <Slider x:Name="sliderValueConverter" ... />
    <TextBox Text="{Binding Path=Value, ElementName=sliderValueConverter,
        Mode=OneWay,
        Converter={StaticResource GradeConverter}}"/>
</Page>

Drugi przykład ustawia cztery różne właściwości powiązania : ElementName, Path, Mode i Converter. Ścieżka w tym przypadku jest wyraźnie określona jako właściwość Binding. Ścieżka jest oceniana jako źródło powiązania danych, które jest innym obiektem w tym samym drzewie obiektów w czasie wykonywania, suwak o nazwie sliderValueConverter.

Zwróć uwagę, jak wartość właściwości Konwerter używa innego rozszerzenia znaczników, rozszerzenia znaczników {StaticResource}, więc istnieją dwa zagnieżdżone użycia rozszerzenia znaczników tutaj. Wewnętrzny element jest oceniany jako pierwszy, aby po uzyskaniu zasobu istniał praktyczny IValueConverter (klasa niestandardowa, której wystąpienie jest tworzone przez element local:S2Formatter w zasobach), którego może używać powiązanie.

Obsługa narzędzi

Funkcja Microsoft IntelliSense w programie Microsoft Visual Studio wyświetla właściwości kontekstu danych podczas tworzenia elementu {Binding} w edytorze znaczników XAML. Po wpisaniu ciągu "{Binding" właściwości kontekstu danych odpowiednie dla ścieżki są wyświetlane na liście rozwijanej. Funkcja IntelliSense pomaga również z innymi właściwościami Binding. Aby to działało, musisz mieć ustawiony na stronie znaczników albo kontekst danych, albo kontekst danych podczas projektowania. Funkcja Przejdź do definicji (F12) współpracuje również z elementem {Binding}. Alternatywnie możesz użyć okna dialogowego powiązania danych.