[英]ViewModel method doesn't return object
我已經在WP8中實現了MVVM,但是在從ViewModel類調用方法時遇到問題,這是App.xaml.cs類的一部分,在其中我從ViewModel類調用方法:
private static PrasanjaViewModel viewModel=null;
/// <summary>
/// A static ViewModel used by the views to bind against.
/// </summary>
/// <returns>The MainViewModel object.</returns>
public static PrasanjaViewModel ViewModel
{
get
{
// Delay creation of the view model until necessary
if (viewModel == null)
{
viewModel = new PrasanjaViewModel();
viewModel.LoadData();
}
return viewModel;
}
}
這是我的PrasanjaViewModel類中實現的LoadData()方法:
public void LoadData()
{
PrasanjaViewModel prasanje1 = GetPrasanje();
IsDataLoaded = true;
}
public PrasanjaViewModel GetPrasanje()
{
var prasanje = new PrasanjaViewModel();
SQLiteConnection db = new SQLiteConnection(App.DB_PATH);
var query = db.Table<Prasanja>().Where(x => x.id == 3);
var result = query.ToList();
foreach (var item in result)
{
prasanje.id = item.id;
prasanje.Tekst = item.Tekst;
}
return prasanje;
}
因此,方法GetPrasanje()可正確返回對象prasanje 。 prasanje1正確返回。 但是,當執行* return viewModel *時 ,它將返回NULL。 我在這里找不到問題所在。
簡單修復:將LoadData()
方法的返回類型從void
更改為PrasanjaViewModel
,並添加return prasanja1;
到該方法的結尾。 問題是您要創建一個PasanjaViewModel實例,該實例用於創建PrasanjaViewModel的另一個實例,而第二個實例(將數據加載到其中)將被丟棄並且從不使用。 您還必須將getter中的行更改為viewModel = viewModel.LoadData();
,但是您將保留第二個實例並丟棄第一個實例!
我正在猜測您要嘗試什么,但是請嘗試以下操作:
GetPrasanje()
方法靜態。 new PrasanjaViewModel()
,而是調用靜態方法。 LoadData()
方法,因為GetPrasanje()
進行加載。 靜態方法是一種“工廠”方法,它將為您創建帶有數據的新viewmodel對象。
另外,在GetPrasanje()
方法的末尾,您要遍歷數據庫查詢結果,並將各行的值一次又一次地分配給prasanje.Id和prasanje.Tekst,每次覆蓋剛剛分配的值。 這可能也不是您想要的。 相反,PrasanjaViewModel應該具有某種收集類型的屬性(例如List<ResultItem> ResultItems
,其中ResultItem
是另一個類,用於保存數據庫中的某一行)。
在另一方面,它看起來像你試圖查詢,並從數據庫中獲取單行 。 在這種情況下,將.Single()
添加到查詢中,並擺脫foreach循環。
這是稍作修改的代碼:
private static PrasanjaViewModel viewModel=null;
/// <summary>
/// A static ViewModel used by the views to bind against.
/// </summary>
/// <returns>The MainViewModel object.</returns>
public static PrasanjaViewModel ViewModel
{
get
{
// Delay creation of the view model until necessary
if (viewModel == null)
{
viewModel = PresanjaViewModel.GetPresanje();
}
return viewModel;
}
}
和:
public static PrasanjaViewModel GetPrasanje()
{
var prasanje = new PrasanjaViewModel();
SQLiteConnection db = new SQLiteConnection(App.DB_PATH);
var result = db.Table<Prasanja>().Where(x => x.id == 3).Single();
prasanje.id = result.id;
prasanje.Tekst = result.Tekst;
return prasanje;
}
我也很好奇Prasanja是什么意思... :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.