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.
Bazen bir nesnenin veya değerin dize gösterimini görüntülemek için veri bağlamalarını kullanmak kullanışlı olabilir. Örneğin, geçerli değerini Slidergörüntülemek için kullanmak isteyebilirsinizLabel. Bu veri bağlamasında Slider kaynağı, hedef ise öğesinin Text Labelözelliğidir.
Kodda dizeleri görüntülerken en güçlü araç statik String.Format yöntemdir. Biçimlendirme dizesi çeşitli nesne türlerine özgü biçimlendirme kodları içerir ve biçimlendirilen değerlerle birlikte başka metinler de ekleyebilirsiniz. Dize biçimlendirmesi hakkında daha fazla bilgi için .NET'te Biçimlendirme Türleri makalesine bakın.
StringFormat Özelliği
Bu tesis veri bağlamalarına taşınır: özelliğini (veya işaretleme uzantısının Binding özelliğini) tek bir yer tutucu ile standart bir .NET biçimlendirme dizesine ayarlarsınız:StringFormat Binding StringFormat
<Slider x:Name="slider" />
<Label Text="{Binding Source={x:Reference slider},
Path=Value,
StringFormat='The slider value is {0:F2}'}" />
XAML ayrıştırıcısının küme ayraçlarını başka bir XAML işaretleme uzantısı olarak kabul etmemesi için biçimlendirme dizesinin tek tırnak (kesme işareti) karakterleriyle sınırlandırıldığını unutmayın. Aksi takdirde, tek tırnak karakteri olmayan dize, çağrısında kayan nokta değerini görüntülemek için kullandığınız dizeyle String.Formataynıdır. biçimlendirme belirtimi F2 değerin iki ondalık basamakla görüntülenmesine neden olur.
StringFormat özelliği yalnızca hedef özellik türünde stringolduğunda ve bağlama modu veya TwoWayolduğunda anlamlıdırOneWay. İki yönlü bağlamalar için, StringFormat yalnızca kaynaktan hedefe geçen değerler için geçerlidir.
Bağlama Yolu'nun sonraki makalesinde göreceğiniz gibi, veri bağlamaları oldukça karmaşık ve karmaşık hale gelebilir. Bu veri bağlamalarında hata ayıklarken, bazı ara sonuçları görüntülemek için ile XAML dosyasına bir StringFormat ekleyebilirsinizLabel. Bunu yalnızca bir nesnenin türünü görüntülemek için kullansanız bile, bu yararlı olabilir.
Dize Biçimlendirme sayfasında özelliğin StringFormat çeşitli kullanımları gösterilir:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:sys="clr-namespace:System;assembly=netstandard"
x:Class="DataBindingDemos.StringFormattingPage"
Title="String Formatting">
<ContentPage.Resources>
<ResourceDictionary>
<Style TargetType="Label">
<Setter Property="HorizontalTextAlignment" Value="Center" />
</Style>
<Style TargetType="BoxView">
<Setter Property="Color" Value="Blue" />
<Setter Property="HeightRequest" Value="2" />
<Setter Property="Margin" Value="0, 5" />
</Style>
</ResourceDictionary>
</ContentPage.Resources>
<StackLayout Margin="10">
<Slider x:Name="slider" />
<Label Text="{Binding Source={x:Reference slider},
Path=Value,
StringFormat='The slider value is {0:F2}'}" />
<BoxView />
<TimePicker x:Name="timePicker" />
<Label Text="{Binding Source={x:Reference timePicker},
Path=Time,
StringFormat='The TimeSpan is {0:c}'}" />
<BoxView />
<Entry x:Name="entry" />
<Label Text="{Binding Source={x:Reference entry},
Path=Text,
StringFormat='The Entry text is "{0}"'}" />
<BoxView />
<StackLayout BindingContext="{x:Static sys:DateTime.Now}">
<Label Text="{Binding}" />
<Label Text="{Binding Path=Ticks,
StringFormat='{0:N0} ticks since 1/1/1'}" />
<Label Text="{Binding StringFormat='The {{0:MMMM}} specifier produces {0:MMMM}'}" />
<Label Text="{Binding StringFormat='The long date is {0:D}'}" />
</StackLayout>
<BoxView />
<StackLayout BindingContext="{x:Static sys:Math.PI}">
<Label Text="{Binding}" />
<Label Text="{Binding StringFormat='PI to 4 decimal points = {0:F4}'}" />
<Label Text="{Binding StringFormat='PI in scientific notation = {0:E7}'}" />
</StackLayout>
</StackLayout>
</ContentPage>
ve üzerindeki Slider bağlamalar ve TimePicker veri türlerine double TimeSpan özgü biçim belirtimlerinin kullanımını gösterir. StringFormat Görünümdeki Entry metni görüntüleyen, HTML varlığının kullanımıyla biçimlendirme dizesinde çift tırnak işaretlerinin " nasıl belirtileceğini gösterir.
XAML dosyasındaki sonraki bölüm, statik DateTime.Now özelliğe başvuran bir x:Static BindingContext işaretleme uzantısına ayarlanmış olan bir bölümüdürStackLayout. İlk bağlamanın özellikleri yoktur:
<Label Text="{Binding}" />
Bu, değerini varsayılan biçimlendirmeyle görüntüler DateTime BindingContext . İkinci bağlama özelliğini görüntülerken, diğer iki bağlama kendisini belirli bir biçimlendirmeyle görüntüler Ticks DateTimeDateTime. Şuna StringFormatdikkat edin:
<Label Text="{Binding StringFormat='The {{0:MMMM}} specifier produces {0:MMMM}'}" />
Biçimlendirme dizenizde sol veya sağ küme ayraçlarını görüntülemeniz gerekiyorsa, bunların bir çiftini kullanmanız yeterlidir.
Son bölüm değerini değerine ayarlar BindingContext Math.PI ve varsayılan biçimlendirme ve iki farklı sayısal biçimlendirme türüyle görüntüler.
Çalışan program şu şekildedir:
ViewModels ve Dize Biçimlendirmesi
bir ViewModel'in de hedefi olan bir görünümün değerini görüntülemek için ve StringFormat kullanırkenLabel, görünümden Label veya ViewModel'den öğesine bağlamayı Labeltanımlayabilirsiniz. Genel olarak, View ve ViewModel arasındaki bağlamaların çalıştığını doğruladığı için ikinci yaklaşım en iyisidir.
Bu yaklaşım, Bağlama Modu makalesinde gösterilen Basit Renk Seçici programıyla aynı ViewModel'i kullanan Better Color Selector örneğinde gösterilmiştir:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:DataBindingDemos"
x:Class="DataBindingDemos.BetterColorSelectorPage"
Title="Better Color Selector">
<ContentPage.Resources>
<ResourceDictionary>
<Style TargetType="Slider">
<Setter Property="VerticalOptions" Value="CenterAndExpand" />
</Style>
<Style TargetType="Label">
<Setter Property="HorizontalTextAlignment" Value="Center" />
</Style>
</ResourceDictionary>
</ContentPage.Resources>
<StackLayout>
<StackLayout.BindingContext>
<local:HslColorViewModel Color="Sienna" />
</StackLayout.BindingContext>
<BoxView Color="{Binding Color}"
VerticalOptions="FillAndExpand" />
<StackLayout Margin="10, 0">
<Label Text="{Binding Name}" />
<Slider Value="{Binding Hue}" />
<Label Text="{Binding Hue, StringFormat='Hue = {0:F2}'}" />
<Slider Value="{Binding Saturation}" />
<Label Text="{Binding Saturation, StringFormat='Saturation = {0:F2}'}" />
<Slider Value="{Binding Luminosity}" />
<Label Text="{Binding Luminosity, StringFormat='Luminosity = {0:F2}'}" />
</StackLayout>
</StackLayout>
</ContentPage>
Artık nesnesinde Slider Label aynı kaynak özelliğe bağlı üç ve öğesi çifti HslColorViewModel vardır. Tek fark, her Slider değeri görüntülemek için bir StringFormat özelliği olmasıdırLabel.
RGB (kırmızı, yeşil, mavi) değerlerini geleneksel iki basamaklı onaltılık biçimde nasıl görüntüleyebildiğinizi merak ediyor olabilirsiniz. Bu tamsayı değerleri yapıdan Color doğrudan kullanılamaz. Çözümlerden biri, ViewModel içindeki renk bileşenlerinin tamsayı değerlerini hesaplamak ve bunları özellik olarak göstermektir. Daha sonra biçimlendirme belirtimini X2 kullanarak bunları biçimlendirebilirsiniz.
Başka bir yaklaşım daha geneldir: Bağlama Değeri Dönüştürücüleri adlı sonraki makalede açıklandığı gibi bağlama değeri dönüştürücüsü yazabilirsiniz.
Ancak sonraki makalede Bağlama Yolu daha ayrıntılı olarak incelenmiştir ve koleksiyonlardaki alt özelliklere ve öğelere başvurmak için bunu nasıl kullanabileceğiniz gösterilmektedir.

