안녕하세요.
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에는 아무것도 바인딩이 되면 안되는것 아닌가요???)
※ 참고사진입니다.
너무 장황하게 설명해서 이해가 안된다면 죄송합니다…