WPF

[ wpf ] DataTemplate 속성 이름에 접근하는 방법 / 클릭 된 라디오 버튼 이름 가져오기

code094 2022. 11. 24. 17:06

DataTemplate 등 안의 컨트롤 이름에 접근 할 수 없음

 

접근하기 위해선 함수 하나 만든다

public IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
        {
            if (depObj != null)
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(depObj, i);

                    if (child != null && child is T)
                        yield return (T)child;

                    foreach (T childOfChild in FindVisualChildren<T>(child))
                        yield return childOfChild;
                }
            }
        }

사용하려 하는 곳에서 RadioButtonChecked 이 함수를 호출 해주면 된다

public List<string> RadioButtonChecked()
        {
            List<string> checkedName = new List<string>();
            foreach (var name in FindVisualChildren<RadioButton>(this))
            {
                if (name.IsChecked == true)
                {
                    checkedName.Add(name.Name);
                }

            }
            return checkedName;
        }

전체 코드

라디오 버튼이 클릭 된 것의 이름만 얻어오기 위함

public IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
        {
            if (depObj != null)
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(depObj, i);

                    if (child != null && child is T)
                        yield return (T)child;

                    foreach (T childOfChild in FindVisualChildren<T>(child))
                        yield return childOfChild;
                }
            }
        }

public List<string> RadioButtonChecked()
{
    List<string> checkedName = new List<string>();
    foreach (var name in FindVisualChildren<RadioButton>(this))
    {
        if (name.IsChecked == true)
        {
            checkedName.Add(name.Name);
        }

    }
    return checkedName;
}

public void MainFuction()
{
		var CheckedRadioButtonName = RadioButtonChecked();
}