Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
NotUygulamanızda {x:Bind} ile veri bağlama kullanma hakkında genel bilgi için (ve {x:Bind} ile {Binding} arasında tam karşılaştırma için) bkz. Ayrıntılı veri bağlama.
Windows 10 için yeni olan {x:Bind} işaretleme uzantısı {Binding} için bir alternatiftir. {x:Bind}{Binding} değerinden daha kısa sürede ve daha az bellekle çalışır ve daha iyi hata ayıklamayı destekler.
XAML derleme zamanında {x:Bind}, bir veri kaynağındaki bir özellikten değer alacak ve bu değeri işaretlemede belirtilen özelliğe ayarlayacak koda dönüştürülür. Bağlama nesnesi isteğe bağlı olarak veri kaynağı özelliğinin değerindeki değişiklikleri gözlemlemek ve bu değişikliklere (Mode="OneWay" ) göre kendini yenilemek üzere yapılandırılabilir. Ayrıca isteğe bağlı olarak kendi değerindeki değişiklikleri kaynak özelliğine (Mode="TwoWay" ) göndermek için de yapılandırılabilir.
{x:Bind} ve {Binding} tarafından oluşturulan bağlama nesneleri büyük ölçüde işlevsel olarak eşdeğerdir. Ancak {x:Bind} derleme zamanında oluşturduğu özel amaçlı kodu yürütür ve {Binding} genel amaçlı çalışma zamanı nesne incelemesini kullanır. Sonuç olarak , {x:Bind} bağlamaları (genellikle derlenmiş bağlamalar olarak adlandırılır) harika performansa sahiptir, bağlama ifadelerinizin derleme zamanı doğrulamasını sağlar ve sayfanızın kısmi sınıfı olarak oluşturulan kod dosyalarında kesme noktaları ayarlamanıza olanak tanıyarak hata ayıklamayı destekler. Bu dosyalar klasörünüzde obj (C#için) <view name>.g.csgibi adlarla bulunabilir.
Tavsiye
{x:Bind} , varsayılan OneWay moduna sahip {Binding} öğesinin aksine varsayılan OneTime moduna sahip. OneWay'in kullanılması, değişiklik algılamayı bağlamak ve işlemek için daha fazla kod oluşturulmasına neden olduğundan bu, performans nedenleriyle seçilmiştir. OneWay veya TwoWay bağlamasını kullanmak için bir modu açıkça belirtebilirsiniz. Ayrıca, işaretleme ağacının belirli bir kesimi için {x:Bind} için varsayılan modu değiştirmek için x:DefaultBindMode kullanabilirsiniz. Belirtilen mod, bu öğedeki ve alt öğelerindeki bağlamanın bir parçası olarak açıkça bir mod belirtmeyen tüm {x:Bind} ifadeleri için geçerlidir.
XAML öznitelik kullanımı
<object property="{x:Bind}" .../>
-or-
<object property="{x:Bind propertyPath}" .../>
-or-
<object property="{x:Bind bindingProperties}" .../>
-or-
<object property="{x:Bind propertyPath, bindingProperties}" .../>
-or-
<object property="{x:Bind pathToFunction.functionName(functionParameter1, functionParameter2, ...), bindingProperties}" .../>
| Süre | Description |
|---|---|
| propertyPath | Bağlama için özellik yolunu belirten bir dize. Daha fazla bilgi aşağıdaki Özellik yolu bölümündedir. |
| bindingProperties | |
| propName=value[, propName=value]* | Ad/değer çifti söz dizimi kullanılarak belirtilen bir veya daha fazla bağlama özelliği. |
| propName | Bağlama nesnesinde ayarlanacağı özelliğin dize adı. Örneğin, "Dönüştürücü". |
| value | Özelliğinin ayarlanacağı değer. Ayarlanan özelliğe göre bağımsız değişkenin söz dizimi şekillenir. Aşağıda,değerin kendisi bir işaretleme uzantısı olduğu = değeri kullanımı örneği verilmiştir: Converter={StaticResource myConverterClass}. Daha fazla bilgi için aşağıdaki {x:Bind} ile ayarlayabileceğiniz özellikler bölümüne bakın. |
Örnekler
<Page x:Class="QuizGame.View.HostView" ... >
<Button Content="{x:Bind Path=ViewModel.NextButtonText, Mode=OneWay}" ... />
</Page>
Bu örnek XAML, ListView.ItemTemplate özelliğiyle {x:Bind} kullanır. x:DataType değerinin bildirimine dikkat edin.
<DataTemplate x:Key="SimpleItemTemplate" x:DataType="data:SampleDataGroup">
<StackPanel Orientation="Vertical" Height="50">
<TextBlock Text="{x:Bind Title}"/>
<TextBlock Text="{x:Bind Description}"/>
</StackPanel>
</DataTemplate>
Özellik yolu
PropertyPath bir {x:Bind} ifadesinin Yolunu ayarlar.
Yol , bağladığınız özelliğin, alt özelliğin, alanın veya yöntemin değerini (kaynak) belirten bir özellik yoludur.
Path özelliğinin adından açıkça bahsedebilirsiniz: {x:Bind Path=...}. Veya bunu atlayabilirsiniz: {x:Bind ...}.
Özellik yolu çözümlemesi
{x:Bind} , DataContext'i varsayılan kaynak olarak kullanmaz; bunun yerine sayfayı veya kullanıcı denetimini kullanır. Bu nedenle, özellikler, alanlar ve yöntemler için sayfanızın veya kullanıcı denetiminizin arka plan kodunu kontrol eder. Görünüm modelinizi {x:Bind} ile kullanıma açmak için genellikle sayfanızın veya kullanıcı denetiminizin arkasındaki koda yeni alanlar veya özellikler eklemek istersiniz. Özellik yolundaki adımlar nokta (.) ile sınırlandırılır ve ardışık alt özellikler arasında geçiş yapmak için birden çok sınırlayıcı ekleyebilirsiniz. Bağlı olan nesneyi uygulamak için kullanılan programlama dilinden bağımsız olarak nokta sınırlayıcısını kullanın.
Örneğin: bir sayfada, Text="{x:Bind Employee.FirstName}" sayfasında bir Çalışan üyesini ve ardından Çalışan tarafından döndürülen nesnede bir FirstName üyesini arar. Bir öğe denetimini çalışanın bağımlılarını içeren bir özelliğe bağlıyorsanız, özellik yolunuz "Employee.Dependents" olabilir ve öğe denetiminin öğe şablonu öğelerin "Bağımlılar" içinde görüntülenmesini sağlar.
C++/CX için {x:Bind} sayfa veya veri modelindeki özel alanlara ve özelliklere bağlanamaz; bağlanabilir olması için ortak bir özelliğiniz olması gerekir. Bağlantı için yüzey alanının CX sınıfları/arabirimleri olarak kullanıma sunulması gerekir ki, ilgili meta verileri alabilelim. [Bindable] özniteliği gerekli olmamalıdır.
x:Bind ile bağlama ifadesinin bir parçası olarak ElementName=xxx kullanmanız gerekmez. Bunun yerine, adlandırılmış öğeler kök bağlama kaynağını temsil eden sayfada veya kullanıcı denetiminde alanlar haline geldiği için bağlama yolunun ilk bölümü olarak öğesinin adını kullanabilirsiniz.
Koleksiyonlar
Veri kaynağı bir koleksiyonsa, özellik yolu koleksiyondaki öğeleri konumlarına veya dizinlerine göre belirtebilir. Örneğin, "Teams[0].Players", burada köşeli parantezler "[ ]" sıfır dizinli bir koleksiyondaki ilk öğeyi talep eden "0" ifadesini içine alır.
Dizin oluşturucu kullanmak için modelin dizinlenecek özelliğin türüne IList<T> veya IVector<T> uygulaması gerekir. (IReadOnlyList<T> ve IVectorView<T> dizin oluşturucu sözdizimini desteklemez.) Eğer dizine alınmış özelliğin türü INotifyCollectionChanged veya IObservableVector'ı destekliyorsa ve bağlama OneWay veya TwoWay ise, bu arabirimlerdeki değişiklik bildirimlerini kaydeder ve dinler. Değişiklik algılama mantığı, belirli bir dizine alınan değeri etkilemese bile tüm koleksiyon değişikliklerine göre güncelleştirilir. Bunun nedeni, dinleme mantığının koleksiyonun tüm örneklerinde ortak olmasıdır.
Veri kaynağı bir Sözlük veya Eşlem ise, özellik yolu koleksiyondaki öğeleri dize adına göre belirtebilir. Örneğin <TextBlock Text="{x:Bind Players['John Smith']}" /> sözlükte "John Smith" adlı bir öğeyi arar. Adın tırnak içine alınması gerekir ve tek veya çift tırnak işareti kullanılabilir. Şapka (^) dizelerdeki tırnak işaretlerini kaçış karakteri olarak kullanmak için kullanılabilir. Genellikle, XAML özniteliği için kullanılan tırnak işaretleri yerine alternatif olanlarını kullanmak en kolay yoldur. (IReadOnlyDictionary<T> ve IMapView<T> indeksleyici sözdizimini desteklemez.)
Dize dizin oluşturucu kullanmak için modelin dizine eklenecek özelliğin türüne IDictionary<dizesi, T> veya IMap<dizesi, T> uygulaması gerekir. Dizine alınan özelliğin türü IObservableMap'i destekliyorsa ve bağlama OneWay veya TwoWay ise, bu arabirimlerde değişiklik bildirimlerini kaydeder ve dinler. Değişiklik algılama mantığı, belirli bir dizine alınan değeri etkilemese bile tüm koleksiyon değişikliklerine göre güncelleştirilir. Bunun nedeni, dinleme mantığının koleksiyonun tüm örneklerinde ortak olmasıdır.
Ekli Özellikler
Ekli özelliklere bağlanmak için, noktadan sonra sınıf ve özellik adını parantez içine almanız gerekir. Örneğin Text="{x:Bind Button22.(Grid.Row)}". Özellik bir Xaml ad alanında bildirilmemişse, belgenin başındaki bir kod ad alanına eşlemeniz gereken bir XML ad alanı ile öneklemelisiniz.
Oyuncu seçimi
Derlenen bağlamalar kesin olarak türlenir ve bir yoldaki her adımın türünü çözümler. Döndürülen tür belirtilen üyeye sahip değilse, derleme aşamasında hata verecektir. Bir nesnenin gerçek tipini bağlamaya belirtmek için casting yapabilirsiniz.
Aşağıdaki örnekte obj , nesne türünün bir özelliğidir, ancak metin kutusu içerdiğinden Text="{x:Bind ((TextBox)obj) kullanabiliriz. Text}" veya Text="{x:Bind obj.(TextBox.Text)}".
Text="{x:Bind ((data:SampleDataGroup)groups3[0]).Title}" ifadesindeki groups3 alanı bir nesne sözlüğüdür, bu nedenle onu data:SampleDataGroup türüne dönüştürmelisiniz. Nesne türünü varsayılan XAML ad alanının parçası olmayan bir kod ad alanına eşlemek için xml verilerinin: ad alanı ön ekinin kullanıldığına dikkat edin.
Not: C# stili atama söz dizimi, eklenen özellik söz diziminden daha esnektir ve gelecekte önerilen söz dizimidir.
İz yolculuğu olmadan dönüştürme
Yerel bağlama ayrıştırıcısı, this'ün işlev parametresi olarak temsil edilmesi için bir anahtar sözcük sağlamaz, ancak işlev parametresi olarak kullanılabilen yolsuz dönüştürmeyi (örneğin, {x:Bind (x:String)}) destekler. Bu nedenle, {x:Bind MethodName((namespace:TypeOfThis))} kavramsal olarak {x:Bind MethodName(this)} ile eşdeğer olanı gerçekleştirmek için geçerli bir yoldur.
Örnek:
Text="{x:Bind local:MainPage.GenerateSongTitle((local:SongItem))}"
<Page
x:Class="AppSample.MainPage"
...
xmlns:local="using:AppSample">
<Grid>
<ListView ItemsSource="{x:Bind Songs}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:SongItem">
<TextBlock
Margin="12"
FontSize="40"
Text="{x:Bind local:MainPage.GenerateSongTitle((local:SongItem))}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Page>
namespace AppSample
{
public class SongItem
{
public string TrackName { get; private set; }
public string ArtistName { get; private set; }
public SongItem(string trackName, string artistName)
{
ArtistName = artistName;
TrackName = trackName;
}
}
public sealed partial class MainPage : Page
{
public List<SongItem> Songs { get; }
public MainPage()
{
Songs = new List<SongItem>()
{
new SongItem("Track 1", "Artist 1"),
new SongItem("Track 2", "Artist 2"),
new SongItem("Track 3", "Artist 3")
};
this.InitializeComponent();
}
public static string GenerateSongTitle(SongItem song)
{
return $"{song.TrackName} - {song.ArtistName}";
}
}
}
Bağlama yollarındaki işlevler
Windows 10, sürüm 1607'den itibaren {x:Bind} bağlama yolunun yaprak adımı olarak bir işlevin kullanılmasını destekler. Bu, işaretlemede çeşitli senaryolara olanak tanıyan güçlü bir veri bağlama özelliğidir. Ayrıntılar için bkz. işlev bağlamaları .
Olay Bağlama
Olay bağlama, derlenmiş bağlama için benzersiz bir özelliktir. Bir olayın işleyicisini, arkasındaki kodda bir yöntem olması yerine bağlama kullanarak belirtmenizi sağlar. Örneğin: Click="{x:Bind rootFrame.GoForward}".
Olaylar için hedef yöntemin aşırı yüklenmemesi ve ayrıca şunların da yapılması gerekir:
- Olay imzasını eşleştirin.
- VEYA parametresi yoktur.
- VEYA olay parametrelerinin türlerinden atanabilen aynı sayıda parametre türüne sahiptir.
Arka planda oluşturulan kodda, derlenmiş bağlama olayı işler ve olay gerçekleştiğinde bağlama ifadesinin yolunu değerlendirerek modeldeki yöntemine yönlendirir. Bu, özellik bağlamalarından farklı olarak modeldeki değişiklikleri izlemediği anlamına gelir.
Bir özellik yolunun dize söz dizimi hakkında daha fazla bilgi için, {x:Bind} için burada açıklanan farkları göz önünde bulundurarak özellik yolu söz dizimi bölümüne bakın.
{x:Bind} ile ayarlayabileceğiniz özellikler
{x:Bind}, işaretleme uzantısında ayarlanabilen birden çok okuma/yazma özelliği olduğundan, bindingProperties yer tutucu söz dizimi ile gösterilmektedir. Özellikler, virgülle ayrılmış propName=değer çiftleriyle herhangi bir sırada ayarlanabilir. Bağlama ifadesine satır sonları ekleyemeyeceğinizi unutmayın. Bazı özellikler için tür dönüştürmesi olmayan türler gerekir, bu nedenle bunlar {x:Bind} içinde iç içe yerleştirilmiş kendi işaretleme uzantılarını gerektirir.
Bu özellikler Bağlama sınıfının özellikleriyle çok aynı şekilde çalışır.
| Mülkiyet | Description |
|---|---|
| Path | Yukarıdaki Özellik yolu bölümüne bakın. |
| Dönüştürücü | Bağlama altyapısı tarafından çağrılan dönüştürücü nesnesini belirtir. Dönüştürücü XAML'de ayarlanabilir, ancak yalnızca kaynak sözlüğünde {StaticResource} işaretleme uzantısı ile atadığınız bir nesne örneğine başvurursanız. |
| ConverterLanguage | Dönüştürücü tarafından kullanılacak kültürü belirtir. ( ConverterLanguage ayarını kullanıyorsanız Dönüştürücü'leri de ayarlamalısınız.) Kültür, standartlara dayalı tanımlayıcı olarak ayarlanır. Daha fazla bilgi için bkz . ConverterLanguage. |
| ConverterParameter | Dönüştürücü mantığında kullanılabilecek dönüştürücü parametresini belirtir. ( ConverterParameter ayarlanıyorsa Dönüştürücü'leri de ayarlamalısınız.) Çoğu dönüştürücü, dönüştürülmek için geçirilen değerden ihtiyaç duydukları tüm bilgileri alan basit mantık kullanır ve ConverterParameter değerine ihtiyaç duymaz. ConverterParameter parametresi, ConverterParameter'da geçirilenleri engelleyen birden fazla mantığa sahip orta düzeyde gelişmiş dönüştürücü uygulamalarına yöneliktir. Dizeler dışındaki değerleri kullanan bir dönüştürücü yazabilirsiniz, ancak bu sık rastlanmayan bir durumdur, daha fazla bilgi için bkz . ConverterParameter'da açıklamalar. |
| FallbackValue | Kaynak veya yol çözümlenemediğinde görüntülenecek değeri belirtir. |
| Mod | Bağlama modunu şu dizelerden biri olarak belirtir: "OneTime", "OneWay" veya "TwoWay". Varsayılan değer "OneTime"dır. Bunun çoğu durumda "OneWay" olan {Binding} için varsayılan değerden farklı olduğunu unutmayın. |
| TargetNullValue | Kaynak değer çözümlendiğinde ancak açıkça null olduğunda görüntülenecek değeri belirtir. |
| BindBack | İki yönlü bağlamanın ters yönü için kullanılacak işlevi belirtir. |
| UpdateSourceTrigger | TwoWay bağlamalarında değişiklikleri denetimden modele ne zaman geri göndereceklerini belirtir. TextBox.Text dışındaki tüm özellikler için varsayılan değer PropertyChanged'dir; TextBox.Text, LostFocus şeklindedir. |
Uyarı
İşaretlemeyi {Binding} yerine {x:Bind} olarak dönüştürüyorsanız , Mode özelliği için varsayılan değerlerdeki farklara dikkat edin. x:DefaultBindMode , işaretleme ağacının belirli bir kesimi için x:Bind için varsayılan modu değiştirmek için kullanılabilir. Seçilen mod, bu öğeye ve alt öğelerine bağlamanın bir parçası olarak açıkça bir mod belirtmeyen x:Bind ifadelerini uygular. OneTime, OneWay'den daha yüksek performanslıdır çünkü OneWay kullanmak, değişiklik algılamasını bağlamak ve işlemek için daha fazla kod oluşturulmasına neden olur.
Açıklamalar
{x:Bind} kendi avantajlarını elde etmek için oluşturulan kodu kullandığından, derleme zamanında tür bilgileri gerektirir. Bu, türü önceden bilmediğiniz özelliklere bağlanamayacağınız anlamına gelir. Bu nedenle, Nesne türünde olan ve çalışma zamanında da değiştirilebilir datacontext özelliğiyle {x:Bind} kullanamazsınız.
Veri şablonlarıyla {x:Bind} kullanırken, Örnekler bölümünde gösterildiği gibi bir x:DataType değeri ayarlayarak bağlanılan türü belirtmeniz gerekir. Ayrıca türü bir arabirim veya temel sınıf türüne ayarlayabilir ve gerekirse tam ifadeyi formüle etmek için tür dönüşümlerini kullanabilirsiniz.
Derlenen bağlamalar kod oluşturma işlemine bağlıdır. Bu nedenle kaynak sözlüğünde {x:Bind} kullanıyorsanız kaynak sözlüğünde arka planda kod sınıfı olması gerekir. Kod örneği için bkz. {x:Bind} ile kaynak sözlükleri .
Derlenmiş bağlamaları içeren sayfalar ve kullanıcı denetimleri, oluşturulan kodda bir "Bağlamalar" özelliğine sahip olur. Bu, aşağıdaki yöntemleri içerir:
- Update() - Bu, derlenen tüm bağlamaların değerlerini güncelleştirir. Tüm tek yönlü/çift yönlü bağıntılar, dinleyicilerin değişiklikleri algılamak için bağlanmasına olanak sağlayacaktır.
- Initialize() - Bağlamalar henüz başlatılmadıysa, bağlamaları başlatmak için Update() çağrısı yapacaktır
- StopTracking() - Bu, tek yönlü ve iki yönlü bağlamalar için oluşturulan tüm dinleyicileri devre dışı bırakır. Update() yöntemi kullanılarak yeniden başlatılabilirler.
Uyarı
Windows 10, sürüm 1607'den itibaren XAML çerçevesi yerleşik bir Boole'dan Görünürlüğe dönüştürücü sağlar. Dönüştürücü true değerini Visible sabit listesi değerine ve false değerini Çökmüş olarak eşler, böylece bir görünürlük özelliğini bir Boole'a bağlamak için dönüştürücü oluşturmanıza gerek kalmaz. Bunun işlev bağlama özelliği olmadığını, yalnızca özellik bağlaması olduğunu unutmayın. Yerleşik dönüştürücüsü kullanmak için uygulamanızın en düşük hedef SDK sürümü 14393 veya üzeri olmalıdır. Uygulamanız Windows 10'un önceki sürümlerini hedeflediğinde kullanamazsınız. Hedef sürümler hakkında daha fazla bilgi için bkz . Sürüm uyarlamalı kod.
Tavsiye
Path veya ConverterParameter gibi bir değer için tek bir küme ayracı belirtmeniz gerekiyorsa, önüne ters eğik çizgi koyun: \{. Alternatif olarak, kaçış gerektiren küme ayraçlarını içeren dizenin tamamını, örneğin ConverterParameter='{Mix}', ikincil bir tırnak kümesi içine alın.
Converter, ConverterLanguage ve ConverterLanguage , bağlama kaynağındaki bir değeri veya türü bağlama hedef özelliğiyle uyumlu bir türe veya değere dönüştürme senaryosuyla ilgilidir. Daha fazla bilgi ve örnek için Ayrıntılı veri bağlamanın "Veri dönüştürmeleri" bölümüne bakın.
{x:Bind} yalnızca bir işaretleme uzantısıdır ve bu tür bağlamaları program aracılığıyla oluşturmanın veya işlemenin hiçbir yolu yoktur. İşaretlemeyi genişletme hakkında daha fazla bilgi için bkz. XAML'ye genel bakış.
Windows developer