[C# WPF] 선택한 CheckBox 항목 여러 개를 Converter를 이용하여 가져오기 - MVVM

우롱밀크티당도70·2023년 12월 5일
1

WPF

목록 보기
17/22
post-thumbnail
post-custom-banner

1. 배경

이전(이 글)에 싱글톤 패턴으로 페이지의 인스턴스를 호출하여 x:Name을 통해 CheckBox의 내용을 가져오는 방식을 사용했었다. 아무리 싱글톤으로 만든 인스턴스라지만 자주 호출하는 것이 영 꺼림칙하여 Xceed Wpf ToolKit을 사용하지 않고 Converter를 작성하여 CheckBox에서 선택한 항목을 List로 만드는 방법으로 변경해보았다.


2. 개발환경

  • VisualStudio 2022 / WPF 애플리케이션(.NET Framework 4.7.2)

3. 내용

  1. ViewModel에는 화면에서 선택한 CheckBox를 받을 List가 필요하다.
		//CheckBox
        public List<string> CheckedList { get; set; }
  1. Converter를 작성한다
	public class CheckBoxToListConverter : IValueConverter
    {
        List<string> bound = new List<string>();

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (bound.Contains(parameter.ToString()))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            bool isChecked = (bool)value;

            if (isChecked)
            {
                bound.Add(parameter.ToString());
            }
            else
            {
                bound.Remove(parameter.ToString());
            }

            return bound;
        }
    }
  1. 화면의 CheckBox에 List와 Converter를 바인딩한다.
<CheckBox Content="A" IsChecked="{Binding CheckedList, Converter={StaticResource CheckBoxToListCV}, ConverterParameter='A'}"/>
<CheckBox Content="B" IsChecked="{Binding CheckedList, Converter={StaticResource CheckBoxToListCV}, ConverterParameter='B'}"/>
<CheckBox Content="C" IsChecked="{Binding CheckedList, Converter={StaticResource CheckBoxToListCV}, ConverterParameter='C'}"/>
<CheckBox Content="D" IsChecked="{Binding CheckedList, Converter={StaticResource CheckBoxToListCV}, ConverterParameter='D'}"/>
  1. CheckBox 선택한 항목을 콘솔에서 출력하여 확인하기

for (int i = 0; i < CheckedList.Count; i++) 
{
	Console.WriteLine(CheckedList[i]);
}

4. 결과

이전 코드를 활용하여 버튼을 누르면 콘솔에 출력되도록 작성해보았다.


5. 참조


6. 생각해볼점

Converter와 CommandParameter 등 이전보다 WPF에 대해 더 많이 알게 된 것 같은 기분이 드는 동시에...난 아직 스택오버플로우가 없으면 Converter 작성하기는 너무 어려운 것 같다. 😂

profile
안뇽하세용
post-custom-banner

0개의 댓글