WPF GroupStyle에 대한 질문입니다.(ICollectionView 사용)

안녕하세요.
WPF 공부한지 2주 정도 되었습니다.
(아직 MVVM에 대한 개념과 코드에 접목시키는게 부족하니 이해 바랍니다…)

오늘도 ICollectionView와 바인딩에 대해 공부하다 막히는 부분이 있어서 글을 올리게 되었습니다.

ListView의 ItemSource에 ICollectionView를 바인딩하고
ICollectionView에는 ObservableCollection을 인스턴스화(?)해서 데이터를 추가하였습니다.
문제는 위 ICollectionView에 있는 데이터를 그룹화할때 바인딩이 제 뜻대로 되지 않습니다.

xaml의 GroupStyle 부분입니다.
TextBlock을 Name이라는 프로퍼티에 바인딩하였습니다.

           <ListView.GroupStyle>
                <GroupStyle>
                    <GroupStyle.HeaderTemplate>
                        <DataTemplate>
                            <TextBlock Margin="2" Foreground="AntiqueWhite" Background="DimGray" FontWeight="SemiBold" FontSize="11" Text="{Binding Name}" />
                        </DataTemplate>
                    </GroupStyle.HeaderTemplate>
                </GroupStyle>
            </ListView.GroupStyle>

ViewModel의 생성자 부분입니다.

 private ICollectionView _customerView;

        ObservableCollection<cClass> _classes = new ObservableCollection<cClass>();
        public ListViewModel()
        {
            _classes.Add(new cClass("이철용", "정보통신공학", "광통신", "A+"));
            _classes.Add(new cClass("이철용", "정보통신공학", "정보통신개론", "B+"));
            _classes.Add(new cClass("이철용", "정보통신공학", "Matlab", "A-"));
            _classes.Add(new cClass("김진수", "물리치료학과", "경영학개론", "A0"));
            _classes.Add(new cClass("김진수", "물리치료학과", "스포츠매너", "B+"));
            _classes.Add(new cClass("이범진", "경영학과", "비즈니스영어", "F"));
            _customerView = CollectionViewSource.GetDefaultView(_classes);

        }

        public ICollectionView CustomerView { get => _customerView; set => _customerView = value; }

ViewModel의 그룹화 하는 부분입니다.

#region Group
        public string GroupCombo { get; set; }
        private ICommand groupClick;
        public ICommand GroupClick
        {
            get
            {
                return (this.groupClick) ?? (this.groupClick = new DelegateCommand(Group_Click));
            }
        }
        private void Group_Click()
        {
            string strGroup = string.Empty; 
            switch (GroupCombo.Split(':')[1].Trim())
            {
                case "이름":
                    strGroup = "Name";
                    break;
                case "전공":
                    strGroup = "Major";
                    break;
                case "과목":
                    strGroup = "Subject";
                    break;
                case "학점":
                    strGroup = "Grade";
                    break;
                default:
                    strGroup = string.Empty;
                    break;
            }
            _customerView.GroupDescriptions.Clear();
            _customerView.GroupDescriptions.Add(new PropertyGroupDescription(strGroup));
        }
        #endregion

Model 부분입니다.

internal class cClass
    {
        public cClass(string name, string major, string subject, string grade)
        {
            this.Name = name;
            this.Major = major;
            this.Subject = subject;
            this.Grade = grade;
        }

        public string Name { set; get; }
        public string Major { set; get; }
        public string Subject { set; get; }
        public string Grade {set; get; }
    }

이런식으로 코드를 구성하였는데, 제가 그룹을
Name이 아닌 다른것으로 그룹을 해도 정상적으로 수행이 됩니다.
(GroupStyle의 TextBox에는 Name으로만 바인딩했기때문에 Name이 아닌것으로 그룹화하면
TextBox의 Text에는 아무것도 바인딩이 되면 안되는것 아닌가요???)

※ 참고사진입니다.
image
image

너무 장황하게 설명해서 이해가 안된다면 죄송합니다…

1개의 좋아요

CollectionViewGroup.Name 속성하고 헷갈리신거 같습니다.
Name은 cClass의 Name이 아닌 Group.Name인거 같습니다.

Name이 아닌것으로 그룹화 했을때 그 그룹화된 이름을 보여주는 거기때문에
제가 봤을땐 정상 같아 보입니다.

아래글도 참고 해보시면 좋을거 같습니다.

혹시나 제가 잘못알고 있는 거라면 댓글 달아주세요.

2개의 좋아요

감사합니다!
넵! 동작은 정상적인데 왜 이렇게 동작하는지 이해 안 됐었습니다!!
다른 Group.Name이란 생각을 못했네요…
적절한 참고자료까지 감사합니다. 수고하세요!

1개의 좋아요