2010-09-15 21 views
6

Kullanıcı denetime sahibim (NameField). İçinde 3 Izgaralar içeren bir stackpanel var: StandardView, FluidView, OtherView. Geride kalan kod içinde View NameFieldView (enum) View adlı bir DependencyProperty var. Enum STANDARD, FLUID, OTHER içerir.WPF Tetikleyici Bağlama: Enum değerini görünürlük düzeyine göre ayarlamanın en iyi yolu nedir?

Bir dönüştürücü oluşturmam gerektiğini düşünüyorum, ancak bunun gerekli olup olmadığından emin değilim. Temel olarak bunu yapmak istiyorum ki, tek görünür ızgara, enum değerine uyan ... yani, eğer View = NameFieldView.STANDARD ise StandardView isimli Izgara görünürse ve diğer ikisi de değilse.

Ayrıca, bunun Grid.Resources/Style veya Grid.Triggers'ın bir parçası olup olmadığından emin değilim?

+0

Yan Not: "Görüntüle" özelliğini özellik adı olarak kullanmaya dikkat edin. Günümüzde WPF dünyasında tercih edilen modus operandi olan Model-View-ViewModel modeliyle oldukça spesifik bir şey ifade ediyor. –

+0

Ben "NameFieldVisualState" sanırım ve VisualState. Ama evet, oradaki rüzgara dikkat ettim :) –

cevap

7

Pek çok WPF gibi, gerçekten zevkinize bağlıdır. İşte birkaç seçenek.

Görünüm özelliğinin değerini bir Görünürlük'e (veya dönüştürücüParametre olarak enum adını kullanarak ve bir dönüştürücü oluşturarak) dönüştüren üç adet IValueConverter oluşturabilirsiniz.

"StandartViewIsVisible", "FluidViewIsVisible" ve "OtherViewIsVisible" adlı üç yeni özellik, Görünüm özelliği değiştiğinde güncelleştirilen "" oluşturabilirsiniz. Bu özellikler dönüş tipi Görünürlük olacaktır. Bu, bir ViewModel kullanmıyor olsanız bile, bir şeyleri yapmanın bir "MVVM" yoludur.

View özelliğinin geçerli değerine göre Uygun ızgara Görünür veya Daralt'ı ayarlayan bir DataTrigger kullanabilirsiniz.

+1

Aslında bir ValueConverter ile gittim ve hangi görünümü kontrol edeceğime karar vermek için bir parametre kullandım. 'Sıvı', Görünümün Akışkan olarak ayarlanmış olup olmadığını kontrol eder. 'Diğer', Görünümün Standart mı yoksa Genişletilmiş mi olduğunu kontrol etti. Ve bu ızgara içinde 2 Kombobox öğesi, Görünüm Genişletilmiş olup olmadığını görmek için 'Genişletilmiş' olarak geçti. Yuppi! –

1

Dönüştürücü oluşturabilirim. Böyle bir uygun ciltleme probleminiz olduğunda bir dönüştürücü eklerseniz, uygulamalarınız için yavaşça bir kütüphane oluşturacak ve gelecekte kendiniz için işleri kolaylaştıracaksınız.

public Object Convert(Object value, Type TargetType, Object param, CultureInfo Culture); 
public Object ConvertBack(Object value, Type TargetType, Object param, CultureInfo Culture); 

dönüştürme bir NameFieldView param olacak ve bir Görünürlük değeri döndürür: Bu iki yöntem olmalıdır - Ben NameFieldViewToVisibilityConverter gibi bir şey çağırır. ConvertBack bir Görünürlük parametresine sahip olacak ve bir NameFieldView değeri döndürecek.

bağlamaları şu şekilde görünecektir:

<Grid Name="StandardView" Visibility="{Binding View, Converter={StaticResource NameFieldViewToVisibilityConverter}" /> 
10

Veri bunun için tetikler kullanırlar. Böyle bir şey görünüyor;

<Style TargetType="DockPanel" x:Key="ViewStyle1"> 
    <Setter Property="Visibility" Value="Collapsed"/> 
    <Style.Triggers> 
    <DataTrigger Binding="{Binding ViewStyle}" Value="ViewStyle1"> 
     <Setter Property="Visibility" Value="Visible"/> 
    </DataTrigger> 
    </Style.Triggers> 
</Style> 

Sonra her görünüm stili için bir DockPanel oluşturmak ve her ViewStyle mülkiyet değişiklikleri, uygun görünümde.

İlgili konular