2012-05-09 10 views
3

コンボボックス項目が選択されている場合、テキストボックスを有効にします。コンボボックスアイテムは定義されていませんが、コンボボックスアイテムのリストを取得するためにcomboxのアイテムソースを使用しています。comboxアイテムが選択されると、テキストボックスのプロパティを変更します。コンボボックス項目が選択されている場合にテキストボックスを有効にします。

(元の質問に貼り付けられたコメント)

<DataTrigger Binding="{Binding ElementName=cmbInstrumentType, 
       Path=SelectedIndex}" 
       Value="1" > 
    <Setter Property="IsEnabled" Value="true" /> 
    <Setter Property="Background" Value="White" /> 
</DataTrigger> 

私だけではないコード内の後ろにXAMLでそれをしたいです。私はすべてのインデックス値のためにそれを繰り返したいいけない -

+1

これを行うことができます;-)私たちにあなたが持っているものを表示し、適切なトラックにあなたを設定します。バインドするクラスのプロパティ(いわゆるViewModel)に応じてできるだけバインディングを行い、TextBoxをComboBoxにバインドしないようにします。あなたのViewModelの状態を変更し、コンボボックスにプロパティの変更があり、TextBoxを*にバインドします。 – Dabblernl

+0

、XAMLではコードビハインドではなく、私はすべてのインデックス値についてそれを繰り返す必要はありません。私はこのコードをテキストボックスのスタイルトリガーの中に書いています – user1379584

+0

私は今、時間がないです。しかし、他の人がうまくいけば引き継ぐだろう。 – Dabblernl

答えて

7

これを行うにはより良い方法は、(Dabblenlが示唆したように)MVVMパターンを使用し、あなたのViewModel内のプロパティにバインドすることですが、私はあなたが何を達成することができると思いますあなたはこのようにしたい:

<StackPanel> 
     <ComboBox ItemsSource="{Binding Items}" Name="cmbInstrumentType"/> 
     <TextBox> 
      <TextBox.Style> 
       <Style TargetType="TextBox"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding ElementName=cmbInstrumentType, Path=SelectedItem}" Value="{x:Null}"> 
          <Setter Property="IsEnabled" Value="False"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </TextBox.Style> 
     </TextBox> 
    </StackPanel> 

項目がコンボボックスで選択されていない場合、これはテキストボックスが無効になります。

編集:拡張コードスニペット私はあなたがそれを扱うスタイルを持つビューを汚染する必要はありませんし、ロジックがないので、コンバータを使用している詰め込むのこの種を行うための最善の方法を考える

+0

はい、同意しますが、問題はアプリケーションが実行されているときです。最初にテキストボックスが無効になります。コンボボックスで選択した場合にのみ有効になります。それ以外の場合は無効になります。 – user1379584

+0

ソリューションは機能しますか?また、単にをここでPropertyとSourceNameプロパティを設定して使用することをお勧めします。 UIのみの要素をトリガするためにバインディングまたはデータトリガを使用する必要はありません。 – cunningdave

+0

コンボボックス選択のトリガースーツのプロパティが変更されました。 – user1379584

1

ビュー内のあなたは、このような何かObjectToBoolのcoverterを必要とする(タイプcheckingsのない非常にシンプルな、などを...と改善されなければならない)、もちろんこの

IsEnabled="{Binding ElementName=cboVersion, Path=SelectedItem, Converter={StaticResource ObjectToBoolConverter}}" 

よう

何か

public class ObjectToBoolConverter : IValueConverter { 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { 
    return value != null; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { 
    throw new NotImplementedException(); 
    } 

}

とあなたのResourceDictionary 例えば、コンバータを登録することを忘れないでください

<Converters:ObjectToBoolConverter x:Key="ObjectToBoolConverter"/> 
関連する問題