所以我试图围绕MVVM,我发现我有更多问题而不是答案。在下一步中,教程对我来说还不够......
基本上我想要一个项目列表,然后是一种获取每个项目细节的方法。
以下是我在网上找到的示例,它们非常适合显示列表,但我需要知道如何使用我的VM来获取此项目的详细信息。
private IList<item> m_items;
private IList<item> m_Item;
private IList<item> getItemDetail(Int32 iId)
{
var myItem =
from i in items
where i.iId == iId
select i;
m_Item = new List<item>();
foreach (var item in myItem)
{
m_Item.Add(item);
}
return m_Item;
}
public myViewModel()
{
m_items = new List<item>
{
new item(1, "test,),
new item(2, "test2"),
new item(3, "test1")
};
m_Item = new List<item>();
m_Item = getItemDetail(iId);
}
更新
我更新了上面的View Model代码。我认为我所做的是我添加了另一个List,当用户导航到详细页面时,视图模型将被调用特定ID,然后填充详细信息List。我可能不需要列表,但我想尝试使其与主页面代码保持一致。
在我的详细信息页面中,我以这种方式设置VM:
itemViewModel VM = new itemViewModel((Int32)navigationParameter);
DataContext = VM;
当我打破VM变量时,我会看到我的2个列表。但是,我的绑定不适用于XAML。如果我需要发布一些示例XAML,请告诉我。我可以这样做,但我希望这里有一些我不知道的东西。
我正在尝试学习MVVM,我想做正确的事情。因此,我不想继续走错路,而是真的想知道“正确”的做事方式。所以如果你看到错误,请告诉我。
谢谢!
答案 0 :(得分:2)
是的,我建议你先回到基础,然后观看关于MVVM的Laurent的Mix会话,你可以从codeplex上的mvvmlight网站找到链接。
但为了打破它,你已经遇到了我刚开始时遇到的一些障碍。
1:(最大的问题)数据绑定工作,您必须使用属性(获取和设置模式)公开数据,只有列表变量不起作用。这适用于您想要绑定的所有内容。另一种方法是直接在代码中设置项目源,但是你将失去数据绑定的所有功能,包括更新。
2:要了解数据绑定,您需要了解INotifyProperty更改的模式,这是底层的gubbins(技术术语;-D),以使绑定正常工作。按照建议启动一个新的“主/细节”项目模板,然后逐步完成它,从持有数据的视图模型到查看视图模型中的数据的视图(页面)
3:对列表使用observablecollections,它们只是更好的绑定,基本上只是带附加内容的列表
4:记住你也可以绑定列表框的“selecteditem”或“selectedindex”来捕获用户选择的内容,只需确保将绑定设置为“twoway”,这样视图就可以将数据推送到viewmodel和不只是阅读,像这样:{binding myselecteditem,mode =“twoway”}
希望这会有所帮助,但如果你仍然卡住Laurents视频是最好的,只需观看几次并按照他的行一行一行
答案 1 :(得分:1)
我相信您希望使用Microsoft称之为“主 - 详细信息绑定方案”的内容,其中多个控件绑定到单个集合或其选定项。为此,您需要绑定到所谓的集合视图,该视图只是WPF使用的集合之上的一个层。例如,您可以将ListBox的ItemSource和ContentControl的Content绑定到同一个集合视图,ContentControl将显示ListBox所选项的详细信息。
请参阅:http://msdn.microsoft.com/en-us/library/ms752347.aspx#master_detail_scenario
P.S。您可能希望使用ObservableCollection而不是List,并确保您的视图模型实现了INotifyPropertyChanged。