在`MainPage`的`ListView`點擊項目後,導航至`PetPropertyPage1`並傳遞選中項目的數據。
// MainPage.xaml.cs
private void lv_ItemClick(object sender, ItemClickEventArgs e) {
// 1. 獲取點擊的數據對象(而非ToString())
var selectedItem = e.ClickedItem as YourDataModel;
if (selectedItem == null) return;
// 2. 導航並傳遞完整對象(推薦)或關鍵標識
this.Frame.Navigate(typeof(PetPropertyPage1), selectedItem);
// 或僅傳遞ID:Frame.Navigate(typeof(PetPropertyPage1), selectedItem.Id);
}
// PetPropertyPage1.xaml.cs
protected override void OnNavigatedTo(NavigationEventArgs e) {
base.OnNavigatedTo(e);
// 3. 接收參數
if (e.Parameter is YourDataModel model) {
// 直接使用完整模型
this.DataContext = model;
} else if (e.Parameter is int id) {
// 根據ID查詢詳情
LoadDetail(id);
}
}
| 錯誤寫法 | 問題 | 正確寫法 |
|---|---|---|
| `lv.SelectedItem.ToString()` | 返回類型名稱而非數據 | `e.ClickedItem as Model` |
| 傳遞字符串拼接 | 類型丟失、解析麻煩 | 直接傳遞對象或ID |
| 在構造函數中獲取參數 | 導航未完成,Frame為空 | 重寫`OnNavigatedTo` |
// 傳遞多參數使用匿名類型或元組
Frame.Navigate(typeof(DetailPage), new { PetId = 123, Mode = "Edit", Token = "abc" });
// 接收端
dynamic param = e.Parameter;
int id = param.PetId;
string mode = param.Mode;
關鍵三步:用`e.ClickedItem`獲取數據對象 → `Frame.Navigate`傳遞強類型參數 → `OnNavigatedTo`接收並綁定。拒絕`ToString()`,擁抱強類型導航。