2017-11-15 10 views
0

ラジオボタンの1つを押すと、コンボボックスが有効になります。コンボボックスIsCheckedを同じグループの4つのボタンにバインドするにはどうすればいいですか?

public class BooleanOrConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     foreach (object value in values) 
     { 
      if (value is bool && (bool) value) 
       return true; 
     } 
     return false; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     return Enumerable.Repeat(DependencyProperty.UnsetValue, targetTypes.Length).ToArray(); 
    } 
} 

定義:あなたは(そして、あなたがしなければならない)バインディングを経由してこの問題を解決する場合の値のいずれかがtrue(ブールOR)であるとして

<RadioButton x:Name="A" GroupName="rButton" Content="A" Grid.Column="4"/> 
<RadioButton x:Name="B" GroupName="rButton" Content="B" Grid.Column="4"/> 
<RadioButton x:Name="C" GroupName="rButton" Content="C" Grid.Column="4"/> 
<RadioButton x:Name="D" GroupName="rButton" Content="D" Grid.Column="4"/> 

<ComboBox IsEnabled="{Binding IsChecked,?? }" Grid.Column="5" Width="120" Height="30"/> 
+0

明確にするために、RadioButtonsの**が**チェックされたら、ComboBoxを有効にしますか? –

+0

@Manfred Radlwimmerはい – sivan24

答えて

2

は、あなたがいる限りtrueを返しMultiBindingConverter必要:

<Window.Resources> 
    <local:BooleanOrConverter x:Key="OrConverter"/> 
</Window.Resources> 

使用法:

<RadioButton x:Name="RadioButtonSource" GroupName="rButton" Content="A" Grid.Column="4"/> 
<RadioButton x:Name="RadioButtonToken" GroupName="rButton" Content="B" Grid.Column="4"/> 
<RadioButton x:Name="RadioButtonII" GroupName="rButton" Content="C" Grid.Column="4"/> 
<RadioButton x:Name="RadioButtonUkey" GroupName="rButton" Content="D" Grid.Column="4"/> 

<ComboBox Grid.Column="5" Width="120" Height="30"> 
    <ComboBox.IsEnabled> 
     <MultiBinding Converter="{StaticResource OrConverter}"> 
      <Binding ElementName="RadioButtonSource" Path="IsChecked"/> 
      <Binding ElementName="RadioButtonToken" Path="IsChecked"/> 
      <Binding ElementName="RadioButtonII" Path="IsChecked"/> 
      <Binding ElementName="RadioButtonUkey" Path="IsChecked"/> 
     </MultiBinding> 
    </ComboBox.IsEnabled> 
</ComboBox> 

この方法で、できるだけ早くRadioButtonsIsCheckedプロパティのいずれかtrueになり、ComboBoxが有効になっています。 RadioButtonをリセットすると、再び無効になります。

+0

視覚的な操作だけの場合は、なぜそれがviewmodelを使用して行う必要がありますか?私の意見では、UIの要素は、コードの背後にあるコードで吹かれているはずです。クリックイベントで行うことができる簡単なタスクを複雑にするだけでなく、viewmodelを渡す理由はありません。 –

+0

@DanieleSartoriあなたが何をしているのかわかりません。自分のコードにViewModelが全くありません。 *「私の意見では、UIの内容はコードの背後に隠されているはずです」*私はその声明に完全に同意しない。コードビハインドでも 'VisualStates'、' StoryBoards'、 'DataTemplates'、' Styles'を生成しますか?私は望んでいない。 –

+0

@DanieleSartori私はあなたに同意しません。 UIのものはXAMLまたはResourceDictionariesになければなりません。 – Sasha

関連する問題