0

因此,我试图围绕 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);

}

更新:

我更新了上面的视图模型代码。我认为我所做的是我添加了另一个列表,当用户导航到详细信息页面时,视图模型会使用特定 ID 调用,然后填充详细信息列表。我可能不需要这里的列表,但我想尝试使其与主页代码保持一致。

在我的详细信息页面中,我以这种方式设置 VM:

    itemViewModel VM = new itemViewModel((Int32)navigationParameter);
    DataContext = VM;

当我打破 VM 变量时,我看到了我的 2 个列表。但是,我的绑定不适用于 XAML。如果我需要发布一些示例 XAML,请告诉我。我可以做到这一点,但我希望我在这里缺少一些东西。

我正在尝试学习 MVVM,我想做正确的事情。因此,与其继续走错路,我真的很想知道“正确”的做事方式。因此,如果您发现错误,请告诉我。

谢谢!

4

2 回答 2

2

是的,我建议您先回到基础知识并观看 Laurent 的关于 MVVM 的 Mix 会话,您可以从 codeplex 上的 mvvmlight 站点找到指向该内容的链接。

但是要分解它,您已经遇到了我刚开始时遇到的一些障碍。

1:(最大的陷阱)要使数据绑定起作用,您必须使用属性(获取和设置模式)公开数据,只是列表变量不起作用。这适用于您要绑定的所有内容。另一种方法是直接在代码中设置项目源,但您将失去数据绑定的所有功能,包括更新。

2:要了解数据绑定,您需要了解 INotifyProperty 更改模式,这是使绑定正常工作的底层 gubbins(技术术语;-D)。按照建议开始一个新的“主/详细信息”项目模板并遍历它,从保存数据的视图模型到查看视图模型中数据的视图(页面)

3:对列表使用 observablecollections,它们更适合绑定,基本上只是带有附加功能的列表

4:请记住,您还可以绑定列表框的“selecteditem”或“selectedindex”来捕获用户选择的内容,只需确保将绑定设置为“twoway”,以便视图可以将数据推送到视图模型而不仅仅是读取,像这样:{binding myselecteditem, mode="twoway"}

希望这会有所帮助,但如果您仍然卡住的 Laurents 视频是最好的,请多看几遍,然后逐行跟随他的操作

于 2012-08-25T00:01:06.683 回答
1

我相信您想使用 Microsoft 所谓的“主从绑定方案”,其中多个控件绑定到单个集合或其选定项。为此,您需要绑定到所谓的集合视图,它只是 WPF 使用的集合之上的一个层。例如,您可以将 ListBox 的 ItemSource 和 ContentControl 的 Content 绑定到同一个集合视图,ContentControl 将显示 ListBox 所选项目的详细信息。

请参阅:http: //msdn.microsoft.com/en-us/library/ms752347.aspx#master_detail_scenario

PS 你可能想使用 ObservableCollection 而不是 List,并确保你的视图模型实现了 INotifyPropertyChanged。

于 2012-08-24T02:57:25.033 回答