2008-11-13 13 views
11

kullanmıyorsa bir stil değişikliğini nasıl tetiklerim? Birkaç denetime sahip bir sayfam var. Denetimler, sayfanın DataContext dosyasından aldıkları değerleri görüntülemeye bağlıdır. Yapmak istediğim, DataContext'in boş olması durumunda sayfanın başka bir görüntüsünü görüntülemek. Bazı durumlarda, "kendi" özelliği ayarlanmışsa veya olmasın, sayfanın kontrolleri farklı şekilde gösterilmelidir.DataContext boşsa veya WPF

DataContext ayarlanıp ayarlanmadığını görmek için ciltleme oluşturmak mümkün mü?

Yaptıklarımı geçici bir çözüm sayfasına bir IsDataContextSet özelliğini ekleyin ve benzeri bağlayıcı belirtmek için olduğu gibi: beklediğim gibi çalışır

Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Page}}, Path=IsDataContextSet}" Value="false" 

ama daha şık yolu onların olduğuna dair bir his var Bunu yap. Ya da en azından WPFish yolu.

cevap

18

Tanımladığınız senaryoyu göz önüne alarak, özellikleri bir stil ve veri tetikleyicisi ile ayarlardım. Veri tetikleyici, veri bağlamı olan varsayılan bağlamayı kullanır.

örneği şöyle olabilir: Veri bağlam bu durumda arka plan sarıdır, boş olmadıkça

<Border> 
    <Border.Style> 
     <Style TargetType="Border"> 
      <Setter Property="Background" 
        Value="Orange" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding}" 
          Value="{x:Null}"> 
        <Setter Property="Background" 
          Value="Yellow" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Border.Style> 
</Border> 

sınır turuncu olacaktır.

+0

Hmm, sorunuzu tekrar okuduktan sonra, gerçekten cevap verdiğimi düşünmüyorum. –

+1

Bu temel olarak doğru cevaptır. Bağlama/stillerinizi normal olarak ayarlayın ve DataContext'e bir tetikleyici ekleyin x: Farklı bir stil/bağlama kümesine geçmek için boştur. –

+0

Bu aslında aradığım şeydi. RelativeSource, FindAncestor, Self sözdiziminde kendimi yakalamıştım, böylece bilmek istediğim şeyin bir mülkün boş olup olmadığını nasıl kontrol edeceğimi unutmuştum. –