2011-11-23 12 views
6

Tüm xaml dosyamı kopyalamam/yapıştırmam. Bunu açıklamak çok uzun ama burada ilginç olan budur olacaktır: Ben şey bazen, benim öğe bir "Ad" özelliğine sahip olmamasıdırBirincisi "tanımsız" ise 2. özelliklere bağlanması

<TextBlock Text="{Binding Name}"/> 

bir Mülkiyet "Ad" bir Cilt aldık. Kilitlenmiyor ama sadece TextBlock

içinde boş bir Metin aldım Ne yapmalıyım, İsim boşsa, "hiçbir şey" ile bağlanacak, sadece {Binding}. Bu benim Nesne ismimi gösterecek ve mükemmel olacak!

herhangi bir yardım için şimdiden teşekkür ederiz ve üzgün bir spor Sağlık soru :(ise

cevap

6

Burada ne istediğiniz bir PriorityBinding olduğunu. Özellikle

, bu (bazı doğrulama gerekebilir tam sözdizimi) gibi görünecektir: Bu özellikle geri düşüyor

  <TextBlock> 
      <TextBlock.Text> 
       <PriorityBinding> 
        <Binding Path="Name"/> 
        <Binding /> 
       </PriorityBinding> 
      </TextBlock.Text> 
     </TextBlock> 

Not o ismi mülkiyet bağlı olmanın nesne üzerinde mevcut olmadığında; Name özelliği boş bir dize değerine sahipse, yine de bu boş değeri kullanacağına inanıyorum.

+0

kabul edilmez ama ur çözüm sesleri harika ! –

+0

Dene:

+1

@Guillaume Dylan göstermek için düzenlenmiş tam sözdizimi; genel olarak, ', bir satır değerinin bir satır içi değerinden ziyade daha karmaşık bir yapıya ayarlanması için XAML sözdizimidir. '{Binding ...}' biçimlendirme uzantısı, bu 'Binding' sınıfı örneklerini oluşturmak için sadece bir kısayoldur. XAML derleyicisi daha sonra Text'in bir Bağımlılık Özelliği olduğunu anlayabilmek için bazı ek özel durum büyüsü yapar, bu yüzden değerin bir şeyler yapmasını sağlamak için gereken çeşitli BindingOperations işlevlerini çağırarak bir Bağlama için değerin 'ayarlanmasını' sağlar. –

0

size varsayılan bir değer eğer verecektir size TargetNullValue kullanabilirsiniz nesne türü adının bağlamak yoksa bağlı özellik aşağıdaki gibi null:

<TextBlock Text="{Binding Name, TargetNullValue=Default}" /> 

gerçekten bir dönüştürücü (IValueConverter uygulamak) yazma öneririm nesne türü adını isterseniz örnek bir dönüştürücü istiyorsanız bana bildirin

+0

Kodunuzda, nesnelerim herhangi bir Name özelliği bulunmadığında boş TextBlock'larım var. Amaçlı olup olmadığını bilmiyorum. Converter hakkında, gerçekten bilmiyorum, bana sadece xaml dosyasında yapmıyoruz şaşırtıcı görünüyor! –

+0

Bu durumda özellik bağlama başarısız olur, böylece TargetNullValue asla kullanılmayacaktır. Hedefe bağlanmadıysanız hedef için boş bir değeriniz olamaz. –

+0

Maalesef, mülkün eksik olduğunu anlamadım, sadece boş olduğunu düşündüm (eğer isim boşsa). Benim hatam. –

0

Bu.. teorik ama ..

Özel bir stil oluşturup tüm textblock'larınızı hedeflerim. Tarzınızın içinde, varsayılan bir metin değeri ayarlayabilirsiniz. Bağlamanız stili geçersiz kılmazsa, varsayılan değeriniz kullanılır.

Style x:Key="TwitterTextBoxStyle" TargetType="{x:Type TextBox}"> 
    <Setter Property="Text" Value="" /> 
+0

Varsayılan değerin başka bir Bağlama olmasını istiyorum, statik bir değer değil :( –

3

Bir DataTrigger oluşan bir stil uygulayabilirsiniz:

<TextBlock> 
    <TextBlock.Style> 
     <Style TargetType="TextBlock"> 
      <Setter Property="Text" Value="{Binding Name}"/> 
      <Style.Triggers> 
       <!-- In this binding you could inject a converter which checks for more than null --> 
       <DataTrigger Binding="{Binding Name}" Value="{x:Null}"> 
        <Setter Property="Text" Value="{Binding}"/> 
       </DataTrigger> 
      <Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 
+0

Çalışıyor görünüyor ama sadece {Binding} kullandığımda emin olmak için bir şey bilmeliyim. Alanın hangi özelliği için bağlandığını? –

+0

@Guillaume, '{Binding}', varolan DataContext'in değerini, mülke atayacağı değer olarak kullanmak anlamına gelir.Böylece, boş bir yol, özelliklerinden ziyade sadece nesne örneğini kullanması anlamına gelir.Çok kullanışlı bir hile sayfasıdır. Bağlama sözdizimi: http://www.nbdtech.com/Free/WpfBinding.pdf –

+1

@GuillaumeCogranne {Binding}, geçerli veri içeriğinizin ayarlandığı şekilde bağlanır.Yani bir sınıfın Name özelliğine bağlanmak yerine, Name özelliğini içeren sınıfa bağlanırsınız. –