2013-03-15 2 views
10

간단한 C# Windows 8 그리드 응용 프로그램을 만들었습니다. - 일부 사용자 지정 ItemDetailPages 내가하고 싶은 무엇Windows 8 그리드 응용 프로그램의 사용자 정의 세부 정보 페이지

Link

은 간단하다 :이 레이아웃에 익숙하지 않은 경우

, 여기에 대한 간략한 설명이 있습니다. GroupDetailPageGroupedItemsPage에있는 일부 항목을 클릭하고 하나 이상의 이미지를 포함 할 수있는 사용자 정의 .xaml 파일로 이동하고 싶습니다.

내가 누락 된 간단한 방법이있을 것이라고 확신합니다. 또한이 정보가 많은 사람들에게 유용 할 것이라 확신합니다. 그래서이 현상에 대해 현상금을 제공 할 것입니다. 문제.

지금까지이 일을 고생 한 다음 ObservableCollection

private ObservableCollection<SampleDataGroup> _allGroups = new ObservableCollection<SampleDataGroup>(); 
public ObservableCollection<SampleDataGroup> AllGroups 
{ 
    get { return this._allGroups; } 
} 

에 추가,

/// <summary> 
    /// Generic item data model. 
    /// </summary> 
    public class CustomDataItem : SampleDataCommon 
    { 
     public CustomDataItem(String uniqueId, String title, String subtitle, String imagePath, String description, String content, SampleDataGroup group) 
      : base(uniqueId, title, subtitle, imagePath, description) 
     { 
      this._content = content; 
      this._group = group; 
     } 

     private string _content = string.Empty; 
     public string Content 
     { 
      get { return this._content; } 
      set { this.SetProperty(ref this._content, value); } 
     } 

     private SampleDataGroup _group; 
     public SampleDataGroup Group 
     { 
      get { return this._group; } 
      set { this.SetProperty(ref this._group, value); } 
     } 
    } 

을하지만, 분명히 :

을 나는 SampleDataSource.cs 클래스의 CustomDataItem을 만들었습니다 다른 데이터 유형에서는 불가능합니다. 이 경우 어떻게해야합니까?

고마워요.

+0

나는 당신이 여기에서 묻고있는 것과 정확히 약간 혼동 스럽다 - 사용자 정의 xaml 페이지가 여러 이미지에 대해 어떻게 보이는지 또는 그룹 항목이 선택 될 때 탐색하는 방법을 묻고 있는가? –

답변

3

간단한 그리드 응용 프로그램이 있습니다. 그룹 항목 페이지의 요소 중 하나를 사용자 지정 항목 세부 정보 페이지에 연결할 수있게하려면 어떻게해야합니까?

좋아, Visual Studio에서 "그리드 응용 프로그램"템플릿을 사용할 때 생성 된 응용 프로그램을 가져갈 수 있습니다.

그룹 항목 페이지의 요소에 대한 데이터 클래스는 SampleDataItem 클래스입니다. 할 수있는 일은 탐색을 처리하는 방법을 나타내는 데이터 필드 (bool, int 또는 기타)를 추가하는 것입니다. 이 예에서는 간단하게 유지하므로 탐색이 맞춤인지 여부를 나타 내기 위해 bool을 추가합니다.

public class SampleDataItem : SampleDataCommon 
{ 
    // add flag as last param 
    public SampleDataItem(String uniqueId, String title, String subtitle, 
     String imagePath, String description, String content, SampleDataGroup group, 
     bool isCustomNav = false) 
    : base(uniqueId, title, subtitle, imagePath, description) 
    { 
     this._content = content; 
     this._group = group; 
     this.IsCustomNav = isCustomNav; 
    } 

    // to keep it simple this doesn't handle INotifyPropertyChange, 
    // as does the rest of the properties in this class. 
    public bool IsCustomNav { get; set; } 

    ... 
} 

그래서 새 SampleDataItem 개체를 표시 할 추가 할 때, 당신은 단지 생성자에서 isCustomNav 필드를 설정해야합니다.

void ItemView_ItemClick(object sender, ItemClickEventArgs e) 
{ 
    // Navigate to the appropriate destination page, configuring the new page 
    // by passing required information as a navigation parameter 
    var item = (SampleDataItem)e.ClickedItem; 
    var itemId = item.UniqueId; 

    if (item.IsCustomNav == false) 
    { 
     // default 
     this.Frame.Navigate(typeof(ItemDetailPage), itemId); 
    } 
    else 
    { 
     // custom page 
     this.Frame.Navigate(typeof(ItemDetailPage2), itemId); 
    } 
} 

우리는 위의 일을 모두 선택한 점점 :

이제 우리가 할 일은 (GroupedItemsPage.xaml.cs) 그룹화 된 항목 페이지의 그리드에 이미 존재하는 클릭 이벤트 처리기를 변경입니다 항목을 만든 다음 앞에서 추가 한 탐색 플래그를 테스트합니다. 이를 바탕으로 원본 ItemDetailPage 또는 ItemDetailPage2이라는 새 이름으로 이동합니다. 앞서 언급했듯이 네비게이션 플래그는 bool 일 필요는 없습니다. int 또는 enum 또는 탐색 할 위치를 알려주는 다른 유형이 될 수 있습니다.

GroupDetailsPage에서 비슷한 동작을 원할 경우 동일한 방식으로 여기에서 클릭 이벤트 처리기를 업데이트하면됩니다.

희망이 있습니다.

+0

완벽하게 작동합니다. –

+0

@chue x : 안녕하세요, 비슷한 문제가 있습니다. 그룹에 다른 유형의 항목을 추가하고 싶습니다. 예를 들어. 한 그룹에는 KPI가 표시되고 한 그룹에는 지표가 표시되지만 샘플 GridApp에서 SampleDataSource.cs에는 단 하나의 유형 (SampleDataItem)의 항목 만 있습니다. 어떻게해야합니까? – Vanya

+0

@Vanya - 나는 당신이 요구하는 것을하지 않았습니다. 그러나 공통 기본 클래스를 저장하는 목록을 사용하는 것을 고려해야합니다. 그런 다음 런타임에 템플릿 선택기를 사용하여 클래스 유형에 따라 데이터를 표시하십시오. 새로운 질문을하고 더 자세한 내용을 제공하면 더 나은 답변을 얻을 수 있습니다. http://stackoverflow.com/questions/ask –

3

예 맞춤 또는 다른 데이터 유형을 생성 할 수 있어야합니다. 표 템플릿을 사용하여 Win8 앱을 만들면 템플릿에서 세 가지 작업을 수행한다는 것을 알 수 있습니다. 1) SampleDataCommon을 구현하는 기본 SampleDataCommon이라는 세 가지 유형, 즉 SampleDataCommon과 content 및 그룹 및 SampleDataCommon을 구현하고 SampleCollectionChanged 메서드를 추가하고 Items 및 TopItems라는 두 가지 속성을 추가하는 SampleDataGroup이 있습니다. 2) SampleDataSource라는 클래스를 만들고 SampleDataGroup의 컬렉션을 만들고 AllGroups : ObservableCollection AllGroups라는 이름으로 만듭니다. 3) SampleDataSource의 Items 및 AllGroups를 XMAL 페이지의 객체에 바인딩합니다.

귀하의 경우 동일한 데이터 구조를 사용합니다. 즉, 항목 등이 포함 된 그룹을 만듭니다.

관련 문제