귀하의 우려 사항을 여기에서 분리하고 싶습니다.
귀하의 모델은이 같은 구조를 갖게됩니다
public class GroupBoxCollection
{
public List<GroupBoxContent> Collections { get; set; }
}
public class GroupBoxContent
{
public string GroupBoxName { get; set; }
public List<GroupBoxItem> Items { get; set; }
}
public class GroupBoxItem
{
public string ItemName { get; set; }
public bool IsChecked { get; set; }
}
을 그리고 당신의 XAML은 다음과 같이 보일 것입니다. SL4에는 기본적으로 GroupBox가 없기 때문에 GroupBox를 사용하지 않습니다. 내가 대신 그리드를 사용합니다,하지만 당신은 그들에게 자신 :
<ListBox x:Name="TestListBox" ItemsSource="{Binding Collections}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="5" Background="Azure">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Text="{Binding GroupBoxName}" />
<ListBox Grid.Row="1" ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsChecked}" Content="{Binding ItemName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
를 사용하도록 코드를 수정 그리고 당신처럼 뭔가를 할 수있는, 코드 숨김의에서 할 수
TestListBox.DataContext = [an instance of GroupBoxCollection here];
물론, 당신이 원하는 방식대로 스타일을 지정하거나 템플릿을 적용하고 ListBox 이외의 다른 것을 사용하여이 방법을 사용할 수도 있습니다. 그러나 이것이 전체적인 아이디어입니다.
참고 :
당신은 또한 모델에서 INotifyPropertyChanged를 구현 및/또는 필요에 따라 목록 대신 ObservableCollection에 사용하도록 할 수도 있습니다. 사용자가 확인란을 선택/선택 취소 할 때 모델에서 모델을 수정하도록하려면 TwoWay 데이터 바인딩을 사용해야 할 수도 있습니다. 어떻게 볼 수 그대로 내 샘플 을 테스트하려면
, 당신은의 DataContext로 설정 전에 (당신이 TestListBox의의 DataContext로 설정하는 것이) 당신이 GroupBoxCollection의 인스턴스를 채울 수 있는지 확인하십시오.