Как я могу получить доступ к проверенному переключателю в привязке данных ItemsControl? - PullRequest
2 голосов
/ 13 января 2011

У меня есть 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.

Ответы [ 2 ]

1 голос
/ 13 января 2011

Вместо того, чтобы добавлять обработчик события щелчка к каждому RadioButton, вы можете сделать это, перечислив 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;
}
1 голос
/ 13 января 2011

хорошо, вы можете сделать это следующим образом

1) Зарегистрировать радио кнопку Нажмите событие

Click = "RadioButton_Click"

2) Do Tag="{Binding}"

3)

private void RadioButton_Click(object sender, RoutedEventArgs e)
{
     RadioButton rb = sender as RadioButton;
     var contant= rb .tag;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...