2011-01-13 17 views
2

私はItemsControlを文字列リストにバインドしています。データバインドされたItemsControl内のチェックされたラジオボタンにはどのようにアクセスできますか?

コード: -

List<string> possibleAnswers; 
possibleAnswers = GetPossibleAnswers(currentQuestion); 
AnswerIC.Items.Clear(); 
AnswerIC.ItemsSource = possibleAnswers; 

XAML: - ボタンのクリックイベントで

<ItemsControl x:Name="AnswerIC" Grid.Row="1" Margin="0,10,0,10"> 
    <ItemsControl.ItemsPanel> 
    <ItemsPanelTemplate> 
     <StackPanel x:Name="AnswerSP" Orientation="Vertical"/> 
    </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <RadioButton GroupName="AnswerRBG" Content="{Binding}" /> 
    </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

、私がチェックラジオボタンのコンテンツを見つけようとすることができませんしています。誰でも提案がありますか?おそらく、私はSilverlightで完全なアマチュアです。

+0

そのコードをご提示くださいあなたに状況とあなたが試したことを示します。 –

+0

申し訳ありませんが、コードが削除されました – Steve

答えて

1

だけでなく、あなたが

1を次のようなことを行うことができます)

クリック= "RadioButton_Click"

2)Tag="{Binding}"

3を行い、ラジオボタンのClickイベントを登録する)

private void RadioButton_Click(object sender, RoutedEventArgs e) 
{ 
    RadioButton rb = sender as RadioButton; 
    var contant= rb .tag; 
} 
+0

これはうまくいくとは思わないか、もしそうなら、私はフォローしていません。送信ボタンが1つあり、そのボタンのクリックイベントで、チェックされているラジオボタンを探しています。 – Steve

+0

この結果をグローバル変数hareに保存して、[Submit]ボタンをクリックしてもクリックできます – Singleton

+0

これはトリックを行いました。 – Steve

1

よりもむしろ、各ラジオボタンにクリックイベントハンドラを追加するには、次の拡張メソッドを使用してItems

string answer = string.Empty; 

foreach (var item in AnswerIC.Items) 
{ 
    var rb = AnswerIC.ItemContainerGenerator 
        .ContainerFromItem(item).FindVisualChild<RadioButton>(); 

    if (rb.IsChecked ?? false) 
    { 
     answer = item.ToString(); 
     break; 
    } 
} 

if (string.IsNullOrEmpty(answer)) 
{ 
    MessageBox.Show("Please select an answer"); 
} 
else 
{ 
    MessageBox.Show(string.Format("You chose: {0}", answer)); 
} 

を列挙することにより、これを行うことができます(また、http://geekswithblogs.net/codingbloke/archive/2010/12/19/visual-tree-enumeration.aspx参照)

public static T FindVisualChild<T>(this DependencyObject instance) where T : DependencyObject 
{ 
    T control = default(T); 

    if (instance != null) 
    { 
     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(instance); i++) 
     { 
      if ((control = VisualTreeHelper.GetChild(instance, i) as T) != null) 
      { 
       break; 
      } 

      control = FindVisualChild<T>(VisualTreeHelper.GetChild(instance, i)); 
     } 
    } 

    return control; 
} 
関連する問題