2011-03-22 1 views
0

는 프로그래밍 방식으로 나는 다음과 같은 코드를 작성했습니다 :Silverlight에서 프로그래밍 방식으로 ListBox에 데이터 항목을 채우는 방법은 무엇입니까? 목록 상자를 채우기 위해 노력

protected override void OnNavigatedTo(NavigationEventArgs e) 
     { 
      TestDBContext context = new TestDBContext(); 
      context.Load(context.GetTaskQuery()); 

     var taskList = GetTasks(); 
     foreach (var t in taskList) 
     { 
      ListBoxTaskItems.Items.Add(t); 

     } 
    } 

    private List<TaskItem> GetTasks() 
    { 
     var tasks = from t in context.Tasks 
        select new TaskItem(t); 
     return tasks.ToList(); 
    } 

문제는 항상 곁에 위의 코드는 빈 목록 상자를 반환한다는 것입니다. 누구든지 프로그래밍 방식으로 데이터 항목으로 목록 상자를 채우기 위해 기존 코드 또는 다른 방법을 수정하는 방법을 알고 있습니까?

편집 # 1 : 디버깅 중 GetTasks() 메서드가 context.GetTaskQuery() 전에 실행되고 이것이 빈 ListBox의 원인이라고 생각했습니다. 그럼에도 불구하고 ListBox를 채우기 위해 코드를 수정하는 방법을 알지 못합니다.

감사합니다.

+0

그리드를 내용으로 추가 할 때 한 가지해야 할 일은 Rectangle과 같은 내 부적합 콘텐츠가 지정된 경우에도 RowDefinition을 통해 행 높이를 설정하는 것이 었습니다. 따라서 콘텐츠가 추가되고 있지만 표시되지 않을 수 있습니다. – Stonetip

답변

1

누군가 다른 솔루션을 게시 한 다음 어떤 이유에서든 삭제 한 사람이 있지만 더 잘 작동 할 수 있습니다. 방금 작업 한 일부 코드에서 시도해 보았고 더 빠르다는 것을 알았습니다.

Binding bind = new Binding(); 

bind.Source = GetTasks(); 

ListBoxTaskItems.SetBinding(ListBox.ItemsSourceProperty, bind); 

(foreach 문 대신 사용하십시오).

0

나는 당신의 foreach 문 안쪽과 같이 그것을 시도 할 것 :

ListBoxItem listBoxItem = new ListBoxItem(); 

listBoxItem.Content = t; 

ListBoxTaskItems.Items.Add(listBoxItem); 

나는 비슷한 일을하고 않도록 긴 TaskItem 콘텐츠로 인정 뭔가 즉해야 한, 목록 상자에 그리드를 추가 할 때 작동 해.