2011-11-29 1 views
0

내 경우처럼, 나는 같은 컬렉션을 포함하는 컬렉션 개체가된다.Silverlight : 컬렉션 모음에서 GroupBox의 체크 박스를 동적으로 만드는 방법은 무엇입니까?</p> <pre><code>public class GroupBoxColletion { public string GroupBoxName; public list<CheckBox> CheckBoxName; } </code></pre> <p>참고 : 나는 총 5 GroupBoxes이 각 그룹 상자에서 나는 100 체크 박스를 만들 필요가

silverlight 4.0에서 바인딩 기술을 사용하여 어떻게 만들 수 있습니까?

모든 힌트는 대단히 감사하겠습니다.

답변

0

나는 당신이하려는 것을보고 있지만, 이것이 이것을 달성하는 올바른 방법이라고 확신하지 못합니다. Silverlight에서 DataBinding을 사용하려면 바인딩 할 데이터가 있어야합니다. 불행히도 CheckBox는 데이터 자체가 아니라 사용자 정의 컨트롤입니다. CheckBox에 바인딩 할 수있는 데이터 컬렉션을 만드는 것이 좋습니다.

public class GroupBoxCollection 
{ 
    public string GroupBoxName; 
    public List<bool> CheckBoxName; 
} 

이렇게하면 CheckBox가 포함 된 ItemTemplate을 사용하여 CheckBoxName 컬렉션의 값을 ItemsControl에 바인딩 할 수 있습니다.

조금 도움이 되었기를 바랍니다. 더 많은 정보가 필요하다면 코멘트를 작성하면 더 많은 도움을 받아이 답변을 편집 할 것입니다.

0

귀하의 우려 사항을 여기에서 분리하고 싶습니다.


귀하의 모델은이 같은 구조를 갖게됩니다

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의 인스턴스를 채울 수 있는지 확인하십시오.

관련 문제

 관련 문제