2010-02-06 4 views
1

다음 항목이있는 comboBox가 있습니다 : a1, a2, a3, a4 그리고 두 개의 RadioButtons r1과 r2가 있습니다. 이것은 달성하고자하는 것입니다. 사용자가 콤보 상자에서 항목 a2를 선택하면 r1의 IsChecked 속성을 true로 설정해야합니다. 사용자가 콤보 상자에서 항목 a3 또는 a4를 선택하면 r2의 IsChecked 속성이 true로 설정되어야합니다. 이것을 선언적으로 성취하고 싶습니다. 즉 변환기를 사용하지 않아도됩니다.ComboBox의 내용에서 RadioButton의 IsChecked 속성을 선언적으로 설정하는 방법은 무엇입니까?

<Window x:Class="BMSystem.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <Window.Resources> 
     <Style x:Key="myRadioActivator1"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=Content, ElementName=comboBox1}" Value="R2"> 
        <Setter Property="RadioButton.IsChecked" Value="True"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
     <Style x:Key="myRadioActivator2"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=Content, ElementName=comboBox1}" Value="R3"> 
        <Setter Property="RadioButton.IsChecked" Value="True"/> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding Path=Content, ElementName=comboBox1}" Value="R4"> 
        <Setter Property="RadioButton.IsChecked" Value="True"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Resources> 
    <Grid> 
     <ComboBox Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" SelectionChanged="comboBox1_SelectionChanged"> 
      <ComboBoxItem>R1</ComboBoxItem> 
      <ComboBoxItem>R2</ComboBoxItem> 
      <ComboBoxItem>R3</ComboBoxItem> 
      <ComboBoxItem>R4</ComboBoxItem> 
     </ComboBox> 
     <RadioButton Height="16" HorizontalAlignment="Left" Margin="10,43,0,0" Name="r1" VerticalAlignment="Top" Width="120" Style="{StaticResource myRadioActivator1}"> 
     </RadioButton> 
     <RadioButton Height="16" HorizontalAlignment="Left" Margin="10,69,0,0" Name="r2" VerticalAlignment="Top" Width="120" Style="{StaticResource myRadioActivator2}"> 
     </RadioButton> 
    </Grid> 
</Window> 
+0

'comboBox1_SelectionChanged' 처리기도 게시 할 수 있습니까? – ChrisF

답변

1

내가 컨버터없이이 일을 당신의 목표는 좋은 생각하지만, 완전히 선언적으로 그 일을 당신의 목표는 의문이다 : 다음은 사전에 내 코드 감사를한다. 난 ComboBox의 항목의보기 모델에 IsChecked 속성을 추가하고 바인딩합니다. 그 재산의 배경에있는 의사 결정 과정을보기에 두는 것은 나에게 우려의 분리를 혼란스럽게하는 것처럼 보입니다.

0

사람 ... 이상한 요구 사항입니다.

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Page.Resources> 
    <XmlDataProvider x:Key="CBOptions"> 
     <x:XData> 
     <Data xmlns=""> 
      <Option Name="R1" /> 
      <Option Name="R2" IsR1Checked="True" /> 
      <Option Name="R3" IsR2Checked="True" /> 
      <Option Name="R4" IsR2Checked="True" /> 
     </Data> 
     </x:XData> 
    </XmlDataProvider> 
    <DataTemplate x:Key="CBItemTemplate"> 
     <TextBlock Text="{Binding [email protected]}" /> 
    </DataTemplate> 
    </Page.Resources> 
    <Grid DataContext="{Binding ElementName=comboBox1, Path=SelectedItem}"> 
    <ComboBox Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="comboBox1" 
     VerticalAlignment="Top" Width="120" IsSynchronizedWithCurrentItem="True" 
     ItemsSource="{Binding Source={StaticResource CBOptions}, XPath=Data/Option}" 
     ItemTemplate="{StaticResource CBItemTemplate}" /> 
    <RadioButton Height="16" HorizontalAlignment="Left" Margin="10,43,0,0" 
     Name="r1" VerticalAlignment="Top" Width="120" GroupName="R1" 
     IsChecked="{Binding [email protected]}" /> 
    <RadioButton Height="16" HorizontalAlignment="Left" Margin="10,69,0,0" 
     Name="r2" VerticalAlignment="Top" Width="120" GroupName="R2" 
     IsChecked="{Binding [email protected]}" /> 
    </Grid> 
</Page> 
0

당신은 DataTemplate로 모든 이동이 Trigger의를 사용하여 그것을 할 수 :

여기에 하나 개의 솔루션입니다. 아마도 로버트의 제안은 이것이 ViewModel 또는 기타 바인딩 된 객체에서 수정되었다고 생각할 것입니다. 그 이유는 UI보다 더 많은 비즈니스 로직이 될 것 같기 때문입니다. 즉 :

<ContentControl Content="{Binding}"> 
    <ContentControl.ContentTemplate> 
     <DataTemplate> 
      <Grid> 
       <ComboBox Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" SelectionChanged="comboBox1_SelectionChanged" 
          SelectedValuePath="Content"> 
        <ComboBoxItem>R1</ComboBoxItem> 
        <ComboBoxItem>R2</ComboBoxItem> 
        <ComboBoxItem>R3</ComboBoxItem> 
        <ComboBoxItem>R4</ComboBoxItem> 
       </ComboBox> 
       <RadioButton Height="16" HorizontalAlignment="Left" Margin="10,43,0,0" Name="r1" VerticalAlignment="Top" Width="120" > 
       </RadioButton> 
       <RadioButton Height="16" HorizontalAlignment="Left" Margin="10,69,0,0" Name="r2" VerticalAlignment="Top" Width="120" > 
       </RadioButton> 
      </Grid> 
      <DataTemplate.Triggers> 
       <Trigger SourceName="comboBox1" Property="SelectedValue" Value="R2"> 
        <Setter TargetName="r1" Property="RadioButton.IsChecked" Value="True"/> 
       </Trigger> 
       <Trigger SourceName="comboBox1" Property="SelectedValue" Value="R3"> 
        <Setter TargetName="r2" Property="RadioButton.IsChecked" Value="True"/> 
       </Trigger> 
       <Trigger SourceName="comboBox1" Property="SelectedValue" Value="R4"> 
        <Setter TargetName="r2" Property="RadioButton.IsChecked" Value="True"/> 
       </Trigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
    </ContentControl.ContentTemplate> 
</ContentControl> 
관련 문제