2016-03-20 12 views
0

私はwpfアプリC#を持っています。列挙リストに基づいてコンボボックスを無効にする方法

私は、列挙型によって作成されるコンボボックスを持っています。

たとえば、第1または第3の(その他の)項目を無効にすることをお勧めします。

これは私のマークアップである:

<ComboBox x:Name="cboJobStatus" /> 

私の列挙:

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

マイコード:

cboJobStatus.ItemsSource = Enum.GetNames(typeof演算(enJobStatus))。この作業を取得するために

私の哀れな試み:

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

項目は文字列ではなくコンボアイテムですので、仕事や実行時にエラーが発生したしませんでした。

あなたのコードは経由(あなたのケースの文字列値に)各項目がコメントで述べたように、 enJobStatusの名前を表しますが、文字列であるとして、あなたはカスタム ItemsContainerStyle ComboBoxItemのために作成し、現在の DataContextIsEnabledをバインドすることができます動作しませんでした
+1

コンバータに追加のパラメータを渡すためのオプションを持つことができますあなたは欲しい – dkozl

+0

こんにちは、ありがとう。あなたが投稿できる例がありますか?ありがとうございました –

答えて

1

カスタムIValueConverter

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

とコンバータで、あなたが有効/無効にする例を考えると

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

    //removed content 
} 

がENABLますしたい値を決めます電子のみドラフト値ではなく、あなたはまた、 `ComboBoxItem`のカスタム` ItemContainerStyle`を作成して、コンバータを介して、あなたが望むものに `IsEnabled`をバインドすることが、よりカスタマイズ可能にするためにConverterParameterを組み込み、

+0

ありがとう –

関連する問題