Получение индекса выбранного RadioButton в группе

У меня есть ссылка на RadioButton rb1.

Как я могу получить индекс выбранного RadioButton в rb1 'с группой?

Я гуглил некоторое время, но безуспешно.

Любая помощь будет оценена

 WiiMaxx13 июн. 2013 г., 10:44
что ты пытаешься достичь? Я могу'не представляю себе случай использования, где вам это нужно.

Ответы на вопрос(2)

Решение Вопроса

то, вероятно, что-то не так с вашим дизайном, и вам следует пересмотреть это.

при этом вы можете пройтись по визуальному дереву и найти его так:

        /// Returns the first GroupBox ancester            
        public DependencyObject  FindAncestor(DependencyObject current)

        {
            current = VisualTreeHelper.GetParent(current);

            while (current != null)
            {
                if (current is GroupBox)
                {
                    return (T)current;
                }
                current = VisualTreeHelper.GetParent(current);
            };
            return null;
        }

затем зайдите через детей и найдите проверенную кнопку радио

    public RadioButton FindChild<t>(DependencyObject parent)       
    {
        // Confirm parent and childName are valid.
        if (parent == null) return null;

        RadioButton foundChild = null;

        int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
        for (int i = 0; i < childrenCount; i++)
        {
            var child = VisualTreeHelper.GetChild(parent, i);
            // If the child is not of the request child type child
            var childType = child as radioButton;
            if (childType == null)
            {
                // recursively drill down the tree
                foundChild = FindChild(child);

                // If the child is found, break so we do not overwrite the found child.
                if (foundChild != null) return foundChild ;
            }
            else if (childName.IsChecked == true)
            {
               return foundChild;  
            }
        }

        return null;
    }
</t>

короткий ответ на ваш вопрос, вы нет. Что вы должны сделать, это связатьRadioButton.IsChecked для некоторыхboolсвойство вашей модели взгляда. Вы можете достичь чего-то вроде группового индекса, связавint Свойство вашей модели представления через вашу реализацию:IValueConverter

Посмотреть свойство модели:

private int _groupIndex = 1;

public int GroupIndex
{
   get { return _groupIndex; }
   set
   {
       if (_groupIndex == value) return;
       _groupIndex = value;
       OnPropertyChanged("GroupIndex");
   }
}

Преобразователь:

public class IndexBooleanConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  {
      if (value == null || parameter == null)
          return false;
      else
          return (int)value == System.Convert.ToInt32(parameter);
  }

  public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  {
      if (value == null || parameter == null)
          return null;
      else if ((bool)value)
          return System.Convert.ToInt32(parameter);
      else
          return DependencyProperty.UnsetValue;
  }
}   

и затем вы связываете это так:

<stackpanel orientation="Horizontal">
   <stackpanel.resources>
       <local:indexbooleanconverter x:key="IndexBooleanConverter">
   </local:indexbooleanconverter></stackpanel.resources>
   <radiobutton content="Option1" ischecked="{Binding Path=GroupIndex, Converter={StaticResource IndexBooleanConverter}, ConverterParameter=1}">
   <radiobutton content="Option2" ischecked="{Binding Path=GroupIndex, Converter={StaticResource IndexBooleanConverter}, ConverterParameter=2}">
   <radiobutton content="Option3" ischecked="{Binding Path=GroupIndex, Converter={StaticResource IndexBooleanConverter}, ConverterParameter=3}">
</radiobutton></radiobutton></radiobutton></stackpanel>

В этом случае ваше свойство модели просмотраGroupIndex будет иметь значения 1, 2 или 3 в зависимости от того, чтоRadioButton отмечен

Ваш ответ на вопрос