我有一個TreeView
,我終於可以使用數據綁定從數據庫中填充。WPF:MVVM中的TreeView
有2個對象是居住在樹:
- FavoriteFolder - 一個對象,可以有孩子:無論是文件夾或報表。
- FavoriteReport - 一個不能有任何孩子的對象:當用戶點擊這個項目時,它會運行一個報告。
目前,我有一個模型 - 視圖類型的設置(我認爲),我想將它更改爲MVVM,所以我可以做的事情與TreeView
-items而不是簡單地顯示出來。
我已經看過很多例子,但我還是新的MVVM和WPF一般,所以對我特別的例子任何指導,將不勝感激
我的兩個存在於TreeView
類:
文件夾項目:
public class FavoriteFolder
{
private string _connectionString = new ServerInfo().ConnectionString;
private string _folderID;
private string _parentID;
private string _folderTitle;
private ObservableCollection<FavoriteFolder> _folders;
private ObservableCollection<FavoriteReport> _reports;
private ObservableCollection<object> _children;
public FavoriteFolder()
{
}
public ObservableCollection<object> Children
{
get
{
_getChildren();
return _children;
}
}
public string FolderID
{
get { return _folderID; }
set { _folderID = value; }
}
public string ParentID
{
get { return _parentID; }
set { _parentID = value; }
}
public string FolderTitle
{
get { return _folderTitle; }
set { _folderTitle = value; }
}
private void _getChildren()
{
_folders = new ObservableCollection<FavoriteFolder>();
_reports = new ObservableCollection<FavoriteReport>();
using (SqlConnection cnn = new SqlConnection(_connectionString))
{
cnn.Open();
string sql = "SELECT * FROM tbl_report_folders where fdr_parent_id =" + _folderID;
SqlCommand cmd = new SqlCommand(sql, cnn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
FavoriteFolder folder = new FavoriteFolder();
folder.FolderID = reader["fdr_folder_id"].ToString();
folder.FolderTitle = reader["fdr_folder_name"].ToString();
folder.ParentID = reader["fdr_parent_id"].ToString();
_folders.Add(folder);
}
reader.Close();
sql = "SELECT * FROM tbl_reports where rpt_folder_id =" + _folderID;
cmd = new SqlCommand(sql, cnn);
reader = cmd.ExecuteReader();
while (reader.Read())
{
FavoriteReport report = new FavoriteReport();
report.ReportID = reader["rpt_report_id"].ToString();
report.ReportTitle = reader["rpt_report_name"].ToString();
report.ParentID = reader["rpt_folder_id"].ToString();
_reports.Add(report);
}
}
//add the children to the collection
foreach (var folder in this._folders)
_children.Add(folder);
foreach (var report in this._reports)
_children.Add(report);
}
}
報告項目:
public class FavoriteReport
{
private string _reportID;
private string _parentID;
private string _reportTitle;
public FavoriteReport()
{
}
public string ReportID
{
get { return _reportID; }
set { _reportID = value; }
}
public string ParentID
{
get { return _parentID; }
set { _parentID = value; }
}
public string ReportTitle
{
get { return _reportTitle; }
set { _reportTitle = value; }
}
}
個
而且MainWindow.xaml.cs -
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ObservableCollection<object> items = new ObservableCollection<object>();
FavoriteFolder fdr = new FavoriteFolder();
fdr.FolderID = "0";
items = fdr.Children;
this.DataContext = items;
}
}
我不是設計專家,但是不會讓您的數據訪問邏輯與您的模型分離很多嗎? –
我同意,你認爲是否創建了一個與數據庫接口的獨立類,該類有返回子元素或其他方法的方法? – ChandlerPelhams