2014-02-26 2 views
2

Windows Phone 8 피벗 컨트롤로 작동하는 이상한 문제가 발생했습니다.런타임 중에 PivotItem 헤더가 변경됩니다.

피벗이 모델 목록에 바인딩되어 있고 모델의 속성 중 하나에 바인딩하는 데 HeaderTemplate이 사용되는 경우 런타임 중에 속성을 변경하면 헤더에 레이아웃 문제가 발생합니다.

다음은 샘플 코드입니다. 간단한 모델 클래스를 만듭니다.

public class MyModel: INotifyPropertyChanged 
{ 
    private string _displayName; 

    public event PropertyChangedEventHandler PropertyChanged; 

    public string DisplayName 
    { 
     get 
     { 
      return _displayName; 
     } 
     set 
     { 
      _displayName = value; 
      if(PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs("DisplayName")); 
      } 
     } 
    } 
} 

그러면 이제 우리가 가지고있는 피벗 컨트롤

<phone:Pivot ItemsSource="{Binding Items}" DisplayMemberPath="DisplayName"> 
    <phone:Pivot.HeaderTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding DisplayName}" /> 
     </DataTemplate> 
    </phone:Pivot.HeaderTemplate> 
</phone:Pivot> 

에 모델 목록을 연결 모델 목록 (뷰 모델에서 발생, 또는 페이지의 코드 수)

Items = new List<MyModel> 
{ 
    new MyModel { DisplayName = "model 1" }, 
    new MyModel { DisplayName = "model 2" }, 
} 

를 초기화 2 피벗 항목 및 헤더가 올바르게 표시됩니다. 이제 우리는 (버튼 클릭 다음과 같은 말) 응용 프로그램 실행 중에 첫 번째 항목의 표시 이름 속성을 변경하고 더 긴 문자열 값을 할당합니다

Items[0].DisplayName = "Some other header"; 

이 헤더가 중복됩니다합니다. 의견이 있으십니까? Elad

당신이 DisplayName 속성을 설정하면

+0

이상한 문제는 최소한의 샘플로 재현 할 수 있습니까? –

+0

물론 가능합니다. 어디서 게시해야합니까? – eshaham

답변

0

처음에 "다른 어떤 헤더"에 다음 값을 "모델이"정상 표시를 변경합니다. 따라서 제 생각에는이 문제는 피벗 헤더 너비 속성 (코드에서 텍스트 블록의 너비)에 의해 발생했습니다. 피벗을로드 할 때 모든 머리글의 너비가 고정되어 있으며 머리글 표시 이름을 longger 값으로 변경하면 피벗이 올바르게 표시되지 않습니다.

+0

예, 고정 너비 문제임을 알고 있습니다. 레이아웃을 새로 고치기 위해 헤더를 우아하게 만드는 방법에 대해 생각한 사람이 있는지 궁금합니다. – eshaham

관련 문제