MVVM - 摘要/详细信息

时间:2012-08-24 02:23:40

标签: xaml mvvm windows-runtime winrt-xaml

所以我试图围绕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,我想做正确的事情。因此,我不想继续走错路,而是真的想知道“正确”的做事方式。所以如果你看到错误,请告诉我。

谢谢!

2 个答案:

答案 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。