2010-11-20 2 views
1

안녕하세요. 목록 상자가 있습니다. MainListBox 동적으로 항목을 추가합니다. 이제 목록 상자에서 항목을 선택할 때 DetialsPage.xaml.cs로 이동하려고합니다. 그러면 내가 선택한 항목에 대한 내 정보를 표시 할 수 있습니다. (silverlight, ListBox에서 개체를 사용하여 새 페이지를 탐색 할 수 있습니까?

private void SetListBox() 
{ 
    foreach (ToDoItem todo in itemList) 
    { 
     MainListBox.Items.Add(todo.ToDoName); 
    } 
} 

MainListBox_SelectionChanged "DetailsPage.xaml.cs에서

// Handle selection changed on ListBox 
private void MainListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    // If selected index is -1 (no selection) do nothing 
    if (MainListBox.SelectedIndex == -1) 
     return; 

    // Navigate to the new page 
    NavigationService.Navigate(new Uri("/DetailsPage.xaml?selectedItem=" + MainListBox.SelectedIndex, UriKind.Relative)); 

    // Reset selected index to -1 (no selection) 
    MainListBox.SelectedIndex = -1; 
} 

창을위한 비주얼 스튜디오 2010 실버 (7) 전화로 생성은) 다음 방법이다. ("윈도우 7에 대한 비주얼 스튜디오 2010 실버에 의해 생성 된 전화) 아래의 방법은 내가 시도하는 것을하지 않는다는 것을 알고 있습니다.

// When page is navigated to set data context to selected item in list 
protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    string selectedIndex = ""; 
    if (NavigationContext.QueryString.TryGetValue("selectedItem", out selectedIndex)) 
    { 
     int index = int.Parse(selectedIndex); 
     DataContext = App.ViewModel.Items[index]; 
    } 
} 

내가 selectedIndex의 액세스하고 MainListbox 너무 Basicly에 내 개체의 내 메소드를 호출하고 싶습니다 : Mainlistbox => 선택 항목 => 세부 사항에 해당 항목을 보내 페이지 => 세부 정보 페이지에 액세스합니다 항목 및 개체 (개체) 메서드를 호출

나는 그것이 어려운 어떤 세부 사항을 찾기 힘들 것 기본 질문이라고 확신합니다. 나는 이것이 내 첫 번째 윈도우 전화 7 애플 리케이션이라고 덧붙이고 싶습니다.

답변

0

가이 페이지로 페이지에서 개체를 전달할 수있는 여러 가지 방법 : 데니스 말했듯이

  1. 직렬화 및 역 직렬화,하지만 당신이 개체를 저장하려는 경우가 아니면이, feasable 있지만, 실용적이지 않다 격리 된 저장소 및 나중에 검색 할 수 있습니다.

  2. 모든 페이지에서 액세스 할 수있는 App.cs 클래스에 개체를 배치하십시오. 마스터 페이지에서 개체를 설정하고 세부 정보 페이지에서 개체를 검색하십시오.

App.cs에 넣을 코드 : MyObject selectedObject;

MasterPage.cs에 넣을 코드 : application.selectedObject = MainListBox.selectedItem;

DetailsPage.cs에 삽입 할 코드 : MyObject selectedObject = application.seletedObject;

  1. Object를 LayoutRoot의 DataContext에 설정할 수는 있지만 머리 위에 그 코드가 없습니다.
0

대답은 간단합니다. 객체를 다른 페이지로 직접 넘겨 줄 수는 없습니다. 이를 JSON 또는 XML로 직렬화 한 다음 대상 페이지에서 역 직렬화 할 수 있지만 직렬화 된 항목은 여전히 ​​매개 변수로 전달되어야합니다.

0

쿼리 문자열 매개 변수로 selectedindex를 보내는 대신 객체 또는 고유 한 ID (개체를 고유하게 식별 할 수있는 ID)를 보낼 수 있습니다.

그런 다음 세부 정보 페이지에서 주 목록 상자 (예 : IsolatedStorage에서 가져올 수있는 "itemList")에서 데이터를 가져 오는 동일한 데이터 소스에서 올바른 개체를 가져올 수 있습니다.

itemList가 인스턴스화되어 메인 페이지 내에서만 유지되는 경우 세부 정보 페이지에서 ID로 항목을 가져올 수 없습니다. 따라서이 경우 itemList를 정적 또는 앱 수준 저장소로 이동해야합니다.

HTH

관련 문제