这是我的第一个问题,我是WPF / MVVM的新手。
我要做的是显示一个包含存储过程返回结果的多列列表视图。
我正在尽力实现MVVM,这就是我遇到麻烦的地方。
我有一个模型(SL_ID
是PK,在数据库中不可为空):
public class mJob_Select_OrderList
{
public int SL_ID { get; set; }
public string E32JobNumber { get; set; }
public string E32_CLIENT { get; set; }
public string SL_DESCRIPTION { get; set; }
public string E32_DESCRIPTION { get; set; }
}
然后我有一个视图模型:
public class vmJob_Select : vmMain
{
#region Members
Models.mJob_Select _mJobSelectSettings;
public SLEVEN_CLASS.dbSLEVENDataContext _dc;
#endregion
#region Constructors
public vmJob_Select()
{
_dc = new SLEVEN_CLASS.dbSLEVENDataContext();
_mJobSelectSettings = new Models.mJob_Select { EnvironmentID = 1 };
//EnvironmentList
var dsEnvironmentList = (from el in _dc.vw_EnvironmentLists orderby el.ENV_ID select new mJob_Select_Environment { ENV_ID = el.ENV_ID, Environment = el.Environment, IMAGE_RESOURCE = el.IMAGE_RESOURCE });
EnvironmentList = new ObservableCollection<mJob_Select_Environment>(dsEnvironmentList);
//Orders List
var dsSLEVENOrders = _dc.get_SLORDER_List(SelectedEnvironmentID).ToList();
SelectOrderList = new List<mJob_Select_OrderList>(dsSLEVENOrders);
}
#endregion
#region Properties
public Models.mJob_Select mJobSelectSettings { get { return _mJobSelectSettings; } set { _mJobSelectSettings = value; } }
public int SelectedEnvironmentID { get { return mJobSelectSettings.EnvironmentID; } set { if (mJobSelectSettings.EnvironmentID != value) { mJobSelectSettings.EnvironmentID = value; RaisePropertyChanged("EnvironmentID"); } } }
public ObservableCollection<mJob_Select_Environment> EnvironmentList { get; set; }
public List<mJob_Select_OrderList> SelectOrderList { get; set; }
}
所以基本上从数据库中的视图中提取EnvironmentList
,我可以成功填充ObservableCollection
。 SelectedOrderList
是存储过程的结果,我正在尝试将此结果加载到某种列表对象中。
我得到的错误是
无法从'System.Collections.Generic.List'转换为'int'
我能够在视图后面的代码中成功实现它,但我正在努力坚持MVVM并使我的ViewModel能够正常工作。
using (SLEVEN_CLASS.dbSLEVENDataContext dbSLEVEN = new SLEVEN_CLASS.dbSLEVENDataContext())
{
var dsSLEVENOrders = dbSLEVEN.get_SLORDER_List(intENVID);
lvSlevenJobs.ItemsSource = dsSLEVENOrders;
lvSlevenJobs.SelectedValuePath = "SL_ID";
}
我一直在寻找并尝试解决这个问题一段时间了,我试图实现一些我在这里找到的解决方案,但无济于事。一个涉及循环IResult
并将每一行添加到模型另一个建议构建更复杂的linq查询而不是存储过程。这些选项都不是不可能的。是否有普遍接受的方法来执行此任务?
提前感谢您提供的任何答案/建议!
// // EDIT 我相信我找到了解决方案。我试图将我的SPROC结果返回到我创建的模型,但是当使用LINQ时,会自动创建一个名为Procedure Name +'Result'的模型。
我声明我的列表使用'Result'模型如下:
public List<get_SLORDER_ListResult> SelectOrderList { get; set; }
List<get_SLORDER_ListResult> lstSLEVENOrders = _dc.get_SLORDER_List(SelectedEnvironmentID).ToList<get_SLORDER_ListResult>();
SelectOrderList = new List<get_SLORDER_ListResult>(lstSLEVENOrders);
然后我将ListView绑定到SelectOrderList。