2013-06-19 3 views
3

내 홈페이지에 범주 이름으로 SVG 로고를 삽입해야하며 각 범주의 로고가 있습니다. 그들은 app.xaml에 DataTemplates으로 정의되어 있으며 ContentControlContentControlDataTemplateSelector의 올바른 로고 (템플릿 선택기가없는 로고 포함이 포함되어 있지만 dinamically 포함해야 함)가 포함되어 있습니다. 여기 DataControl의 바인딩 된 내용이 DataTemplateSelector에서 null입니다.

는 홈페이지의 XAML입니다 :

<GroupStyle> 
    <GroupStyle.HeaderTemplate> 
     <DataTemplate> 
      <Grid Margin="1,0,0,6" Name="CategoryName"> 
       <Button AutomationProperties.Name="Group Title" Click="Category_Click" Style="{StaticResource TextPrimaryButtonStyle}"> 
        <ContentControl Name="CategoryLogo" Content="{Binding Category.Name}" ContentTemplateSelector="{StaticResource LogoTemplateSelector}" IsHitTestVisible="True" Margin="3,-7,10,10"/> 
       </Button> 
      </Grid> 
     </DataTemplate> 
    </GroupStyle.HeaderTemplate> 
</GroupStyle> 

을 그리고 여기 내 DataTemplateSelector :

public class LogoTemplateSelector : DataTemplateSelector 
{ 
    public string DefaultTemplateKey { get; set; } 

    protected override DataTemplate SelectTemplateCore(object item, Windows.UI.Xaml.DependencyObject container) 
    { 
     var category = item as String; 
     DataTemplate dt = null; 

     switch (category) 
     { 
      case "Category1": dt = FindTemplate(App.Current.Resources, "Logo1"); 
       break; 
      case "Category2": dt = FindTemplate(App.Current.Resources, "Logo2"); 
       break; 
      case "Category3": dt = FindTemplate(App.Current.Resources, "Logo3"); 
       break; 
      case "Category4": dt = FindTemplate(App.Current.Resources, "Logo4"); 
       break; 
      default: dt = FindTemplate(App.Current.Resources, "Logo1"); 
       break; 
     } 

     return dt; 
    } 

    private static DataTemplate FindTemplate(object source, string key) 
    { 
     var fe = source as FrameworkElement; 
     object obj; 
     ResourceDictionary rd = fe != null ? fe.Resources : App.Current.Resources; 
     if (rd.TryGetValue(key, out obj)) 
     { 
      DataTemplate dt = obj as DataTemplate; 
      if (dt != null) 
      { 
      return dt; 
      } 
     } 
     return null; 
    } 
} 

내 문제는 Content="{Binding Category.Name}"object item 내가 얻을 있기 때문에 작동하지 않는다는 것입니다 내 DataTemplateSelector에서 null입니다.

처음에는 동일한 바인딩으로 TextBlock이 있었고 범주 이름이 올바르게 표시 되었기 때문에 제대로 작동한다고 가정합니다.

또한 ContentControl의 스타일을 사용하여 바인딩을 시도했지만 아무 것도 변경하지 않았습니다.

내가 잘못 했습니까?

내 항목이 내 데이터가 전에 DataTemplateSelector 번이라고

if (category == null) 
{ 
    return null; 
} 

템플릿 선택에서 null의 경우 내가 확인했다 :

감사

답변

4

확인은 결국 해답을 발견 초기화 (따라서 바인딩 할 카테고리가 없음) 및 두 번째로 카테고리를 초기화하고 내보기에 바인드했습니다.