2013-03-30 4 views
0

Panorama.TitleTemplate 속성과 아무런 성공없이 그것에 데이터를 바인딩하기위한 사전을 사용하여 파노라마 페이지의 제목 영역을 사용자 정의하려고했습니다. 내 XAML 코드는 다음과 같다 :Panorama.TitleTemplate에 데이터 바인딩하기

<Grid x:Name="LayoutRoot"> 
    <controls:Panorama Name="siteHubPanoramaControl"> 
     <controls:Panorama.TitleTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal" Height="75" Margin="0,75,0,0" Width="470" DataContext="{Binding}"> 
        <Image Source="{Binding imageSource}" /> 
        <TextBlock Text="{Binding name}" /> 
       </StackPanel> 
      </DataTemplate> 
     </controls:Panorama.TitleTemplate> 

     <!--Panorama item one--> 
     <controls:PanoramaItem Header="Site Info"> 
      <Grid/> 
     </controls:PanoramaItem> 

     <!--Panorama item two--> 
     <controls:PanoramaItem Header="Others"> 
      <Grid/> 
     </controls:PanoramaItem> 
    </controls:Panorama> 
</Grid> 

내가 다음 코드를 사용하여 데이터 템플릿에 사전을 결합 : 나는 솔루션을 찾고되었지만 하나를 찾을 수 없습니다

Dictionary<string, string> dictionary = new Dictionary<string, string>(); 
dictionary.Add("name", this.name); 
dictionary.Add("imageSource", "http://..."); 

siteHubPanoramaControl.DataContext = dictionary; 

. 이 문제에 대해 저를 도울 수 있으면 기쁩니다.

또한 데이터 바인딩에 대해 배울 좋은 자료가 있습니까? 사전에

감사합니다 ...

답변

1

모두 nameimageSource 재산 없습니다. 사전에 열쇠가 있습니다. 그래서, 당신이 그 둘을 묶으려고 할 때, 그 이름을 가진 어떤 물건도 찾을 수 없었습니다.

해당 값을 속성에 표시해야합니다. 예 :

public string Name 
{ 
    get { return dictionary["name"]; } 
} 

다른 방법은 확실하지 않지만 그게 내 생각입니다. 내가 생각하기에 일해야한다.

편집 :

좋아, 코드 아래에이 작업을해야합니다, 당신은 MVVM 패턴을 사용하는 가정.

뷰 모델

public class MainPageViewModel 
    { 
     private Dictionary<string,string> _dictionary = new Dictionary<string, string>(); 

     public MainPageViewModel() 
     { 
      _dictionary.Add("name", "Foo"); 
      _dictionary.Add("imageSource", "http://"); 
     } 

     public string Name 
     { 
      get { return _dictionary["name"]; } 
     } 

     public string ImageSource 
     { 
      get { return _dictionary["imageSource"]; } 
     } 
    } 

숨김 코드

public partial class MainPage : PhoneApplicationPage 
{ 
    private MainPageViewModel _vm; 
    // Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 

     _vm = new MainPageViewModel(); 
     DataContext = _vm; 
    } 
} 

XAML의 경우 XAML은

<Grid x:Name="LayoutRoot"> 
    <phone:Panorama Name="siteHubPanoramaControl"> 
     <phone:Panorama.Title> 
      <StackPanel Orientation="Horizontal"> 
        <Image Source="{Binding ImageSource}"/> 
        <TextBlock Text="{Binding Name}" /> 
       </StackPanel> 
     </phone:Panorama.Title> 
     <!--Panorama item one--> 
     <phone:PanoramaItem Header="Foo"> 
      <Grid/> 
     </phone:PanoramaItem> 

     <!--Panorama item two--> 
     <phone:PanoramaItem Header="Others"> 
      <Grid/> 
     </phone:PanoramaItem> 
    </phone:Panorama> 
</Grid> 

대신 Panorama.TitleTemplate을 사용하고 DataTemplate을 적용, 그것은 더 쉽게하는 대신 Panorama.Title를 사용 . 나는 TitleTemplate으로 해봤지만 제목 만 바인딩 할 수는 있지만 이미지는 만들 수 없습니다. 따라서 가장 쉬운 해결 방법은 Panorama.Title을 사용하는 것입니다.

+0

자주 사용하거나 다른 용도로 사용하는 앱 제목 및 이미지를 변경하지 않는 한 XAML에서 두 항목의 값을 하드 코딩하는 것이 좋습니다. –

+0

그 해결책은 나를 위해 일했습니다. 당신의 도움을 주셔서 감사합니다. –

+1

감사합니다. Shulhi,이 질문에 대한 답변이 많아서 DataTemplate을 사용합니다. 명백하게 그들은 작동하지 않기 때문에 코드가 작동하는지 확인하지 않습니다. 이것은 완벽한 해결책입니다. – Seamus

관련 문제