5

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

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

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

コードビハインドではなく、XAMLで使用したい。すべてのインデックス値に対してそれを繰り返したくありません–

4

2 に答える 2

8

これを行うためのより良い方法は、MVVM パターンを使用して ViewModel のプロパティにバインドすることですが (Dabblenl が提案したように)、次のようにして目的を達成できると思います。

    <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>

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

編集:拡張コードスニペット

于 2012-05-09T13:20:49.787 に答える
2

この種のものを行う最善の方法はコンバーターを使用することだと思うので、それを処理するスタイルでビューを汚染する必要はなく、ロジックはビューにありません

このようなもの

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

もちろん、このようなObjectToBoolカバーターが必要です(タイプチェックなどなしで非常にシンプルで、改善する必要があります)

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"/>
于 2015-05-25T13:27:50.313 に答える