2016-03-20 9 views
0

Ich habe eine wpf app C#.So deaktivieren Sie ein Kombinationsfeld basierend auf einer Aufzählungsliste

Ich habe ein Kombinationsfeld, das durch eine Aufzählung gefüllt wird.

Ich möchte zum Beispiel das 1. oder 3. (etc) Element deaktivieren.

Das ist mein Markup:

<ComboBox x:Name="cboJobStatus" /> 

meine Enum:

public enum enJobStatus 
{ 
    Draft = 0, 
    Booked = 1, 
    Started = 2, 
    OnHold = 3, 
    Completed = 4, 
    Paid = 5, 
    All = 6 
} 

mein Code:

cboJobStatus.ItemsSource = Enum.GetNames (typeof (enJobStatus));

mein erbärmlicher Versuch diese Funktion zu erhalten:

foreach (var item in cboJobStatus.Items) 
{ 
    ((ComboBoxItem)item).IsEnabled = false; 
} 

, die nicht auch zur Laufzeit fehlerhaft funktionierte, weil das Element ein String ist und nicht ein Combo-Element.

+1

erstellen 'ItemContainerStyle' Gewohnheit führen Sie wollen – dkozl

+0

Hallo, danke. Hast du ein Beispiel, das du schreiben könntest? danke –

Antwort

1

Ihr Code nicht als jedes Element arbeitete eine Zeichenfolge, die Namen repräsentiert von enJobStatus ist aber, wie im Kommentar erwähnt, können Sie benutzerdefinierte ItemsContainerStyle für ComboBoxItem und binden IsEnabled zu Ihrem aktuellen DataContext (in Ihrem Fall String-Wert) über erstellen IValueConverter benutzerdefinierte

<ComboBox x:Name="cboJobStatus"> 
    <ComboBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ComboBoxItem}"> 
      <Setter Property="IsEnabled" Value="{Binding Path=., Converter={StaticResource EnabledConverter}}"/> 
     </Style> 
    </ComboBox.ItemContainerStyle> 
</ComboBox> 

und in Konverter Sie entscheiden, welche Werte Sie deaktivieren/aktivieren möchten

public class EnabledConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return (string)value == "Draft"; 
    } 

    //removed content 
} 

gegebenen Beispiel wird ENABL e nur Entwurf Wert, aber Sie können auch ConverterParameter enthalten eine Option, um es individuell anpassbar und haben zusätzliche Parameter in Konverter für `ComboBoxItem` und bind` IsEnabled` zu etwas, das Sie über Konverter wollen

+0

Vielen Dank –

Verwandte Themen