2012-09-19 2 views
1

피벗 섹션에 데이터 바인딩 목록 상자가 있습니다.ListBox.ItemContainerGenerator.ContainerFromIndex가 null을 반환합니다.

또 다른 피벗 섹션에는 ListBox에 대한 새 항목을 만드는 양식이 있습니다.

내가 TextBox 컨트롤을 찾아 텍스트 값을 수정하기위한 내가 새로운 ListBoxItem의에 대한 액세스를 필요로하는 목록 상자에 새 항목을 추가

하지만

ListBoxItem lbItem = allItemsListBox.ItemContainerGenerator.ContainerFromIndex(itemIndex) as ListBoxItem; 

항상 null를 돌려줍니다.

문제는 ListBox가 보이지 않아서 새로운 ListBoxItem이 가상이라는 것입니다.

어떻게 해결할 수 있습니까?

감사합니다.

+1

생성 될 때까지 ItemContainers를 가져올 수 없습니다. 먼저 ListBox를 렌더링해야합니다. – decyclone

+0

그리고 그것을 수행하는 또 다른 방법이 있습니까? –

답변

1

컨트롤을 직접 수정하는 대신 DataTemplates로 데이터 바인딩을 사용하지 않는 이유는 무엇입니까? 예를 들어

:

코드 :

// Data binding class 
public class Data 
{ 
    // Implement INofifyPropertyChanged 
    public string Text { get; set; } 
} 

// Code to bind it to Pivot 

ObservableCollection<Data> list = new ObservableCollection<Data>(); 
// populate list 
Pivot1.ItemsSource = list; 

는 XAML : 이제

<Pivot Name="Pivot1"> 
    <Pivot.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text={Binding Text}" /> 
     </DataTemplate> 
    </Pivot.ItemTemplate> 
</Pivot> 

, 특정 TextBlock의 텍스트를 변경하려면, 당신이해야 할 모든 관련의 값을 변경할 수있다 목록에서 데이터 개체를 가져옵니다.

+0

저는 이미 ListBox에서 데이터 바인딩을 사용하고 있지만 템플릿에는 TextBlock과 TextBox라는 두 개의 컨트롤이 있으며 두 가지 모두에 대한 소스가 다릅니다. 그래서 유일한 방법은 두 클래스를 결합한 다음 ListBox에 데이터 바인딩하는 새로운 클래스를 만드는 것입니다. 그렇지 않으면 다른 방법이 있습니까? 감사합니다. –

관련 문제