2016-05-16 17 views
9

Aynı etikette bazı statik metin ve bindable bir içerik olması mümkün mü? Ben sadece kolayca totalCost.Text = String.Format("${0}", totalCost); gibi bir şey yaparak alanını ayarlamak ama mümkün olsaydı sadece görmek için başka bir yol istediğini biliyorumBindings XAML ile Bağlama Dizisi XAML

"$ {TOTALCOST Bağlama}" olarak ekranlara hariç

<Label Text = "${Binding totalCost}" 
     x:Name = "totalCost" 
     HorizontalOptions = "Start" 
     VerticalOptions = "Start" 
     Grid.Row = "6" Grid.Column = "1"/> 

bu sizin için çalışıyorsa

cevap

24

bakınız:

Text="{Binding totalCost, StringFormat='${0}'}" 

farklı XAMLS farklı olabilir, ama Binding içinde StringFormat beklenebilir Yalnızca bağlamanın hedef özelliği String türünde çalışmak için kullanılır. WPF'de, örneğin, TextBlock.Text için çalışır, ancak , Object türünde değildir. Bu nedenle, genellikle bu küçük bubi tuzağına aşina değilseniz çok sessiz olabilir, sessizce başarısız olur. ContentControl ve birçok torunları (Label, vs) bir dize ve biçimleri o kadar Content coerces bir ContentStringFormat özelliği vardır:

Başka kullanışlı bir şey

bilmek. HeaderedItemsControl ( MenuItem, vb. Temel sınıfı) ve HeaderedContentControl ( GroupBox temel sınıfı), her biri kendi HeaderStringFormat property ürününe sahiptir; bu, ilgili Header özellikleriyle aynıdır.

+0

Teşekkür ederiz! Bu aslında benim için çalışıyordu. Cevabını bana izin verdiğinde 5 dakika içinde kabul edeceğim. – John

+2

@Shane İyi haber! –

3

Seçilen yanıt doğru olmasına rağmen, para birimi değerleriniz veya potansiyel döneminizdeki virgülleri göz ardı edeceksiniz. Bağlama için uygun değeri sağlayan bir get özelliği ortaya çıkarmak için daha iyi bir yol olurdu. Aşağıda

double totalCost; 
public double TotalCost 
{ 
    get { return totalCost; } 
    set 
    { 
     totalCost = value; 
     OnPropertyChanged(nameof(TotalCostFormatted)); 
    } 
} 
public string TotalCostFormatted 
{ 
    get { return TotalCost.ToString("C0"); } 
} 

her zaman sadece bazı verileri ortaya senin ViewModel bir get özelliğini oluşturabilir sizi hatırla ViewModel olarak

<Label Text = "${Binding TotalCostFormatted}" 
     x:Name = "totalCost" 
     HorizontalOptions = "Start" 
     VerticalOptions = "Start" 
     Grid.Row = "6" Grid.Column = "1"/> 

gelecek

herkes için bir kod parçacığı olduğunu. OnPropertyChanged numaralı telefonu arayın veya INotifyPropertyChanged arabiriminizi uygulayan yönteminiz ne olursa olsun. Dolar değerinizdeki sent'leri istiyorsanız, "C0" değerini sadece "C" olarak değiştirin.

0

Ben istediğim şeyi yapmanın .NET yöntemini düşünüyorum; bu, biçim değeri dizesini para birimidir.

Currency Format Specifier ile birlikte bağlama özelliğini StringFormat kullanıyor:

Text="{Binding totalCost, StringFormat=\{0:C\}}" 

Kodunuz bu

<Label Text="{Binding totalCost, StringFormat=\{0:C\}}" 
    x:Name = "totalCost" 
    HorizontalOptions = "Start" 
    VerticalOptions = "Start" 
    Grid.Row = "6" Grid.Column = "1"/> 

alkış gibi görünürdü.