【问题标题】:Sticky Notes project in WPF. Model, View, ViewModelWPF 中的便笺项目。模型、视图、视图模型
【发布时间】:2013-03-11 19:33:43
【问题描述】:

我正在开发一个 Sticky Notes 项目并在 WPF 中制作 UI,并且显然将 MVVM 作为我的架构设计选择。我正在重新考虑我的模型、视图和视图模型应该是什么。

我有一个名为 Note 的类,如下所示:

class Note
{
    public Guid ID { get; set; }
    public string Note { get; set; }
}

我也有用户,它存储笔记的集合:

public class User
{
    public Guid ID { get; set; }
    public Dictionary<Guid, Note> Notes = new Dictionary<Guid,Note>();
}

所以现在我需要制作我的模型和视图模型。首先,我想采用最明显的方法,即 Note 本身就是模型,然后为 ViewModel 设置一个 NoteViewModel。但是后来我想,如果我将 User 作为模型并为 ViewModel 提供一个 UserViewModel 类会怎样。如果我这样做了,我该如何实现 INotifyPropertyChanged。如果我的模型是 Note,INotifyPropertyChanged 的​​实现很简单。非常感谢您对此的想法。

【问题讨论】:

  • 什么?? UserVM 应该有一个 NoteVM 列表。就那么简单。我不明白你的问题。另外,不要使用字典代替列表。字典使事情变得过于复杂并添加了不需要的额外代码。
  • 字典和列表通常在视图模型中没有位置。也许你的意思是 ObservableCollection。
  • 我没有将字典或列表放在视图模型中
  • 拥有 NoteVM 列表的 UserVM 听起来是个有趣的想法。因此,您所说的 HighScore 是为 Note 提供一个单独的 ViewModel,然后为 User 提供另一个 ViewModel。那么我是否应该将 NoteViewModel 中的事件绑定到 UserViewModel 中的事件?这可以接受吗?我可以通过很多方式做到这一点,我只想以正确的方式做到这一点。这不仅仅是完成工作,而是遵循最佳模式实践。

标签: c# .net wpf xaml mvvm


【解决方案1】:

我认为您需要拓宽模型的概念。简而言之: 模型是您将使用的“对象”的表示(可以是带有表的数据库或您定义的 POCO)。 User 和 Note 都可能是模型的一部分,就像 client 表和 clientOrders 表是数据库中模型的一部分一样。 ViewModel 处理与模型交互的业务逻辑,并通过 wpf 属性绑定将该数据公开给视图。

至于INotifyPropertCHanged,这里有一个简单的用法(vb):

Imports System.ComponentModel

Public Property CustomerName() As String 
        Get 
            Return Me.customerNameValue
        End Get 

        Set(ByVal value As String)
            If Not (value = customerNameValue) Then 
                Me.customerNameValue = value
                NotifyPropertyChanged()
            End If 
        End Set 
    End Property

c#:

 using System.ComponentModel

 public string CustomerName
        {
            get
            {
                return this.customerNameValue;
            }

            set
            {
                if (value != this.customerNameValue)
                {
                    this.customerNameValue = value;
                    NotifyPropertyChanged();
                }
            }
        }

希望对你有帮助

【讨论】:

    【解决方案2】:

    YouTube 上提供了有关如何执行此操作的更说明性的方法。底线是 UserViewModel 将是父视图模型,而多个 NoteViewModel 将是子视图模型。父视图模型将负责创建子视图模型。享受视频,就像作者说的那样 - 编码愉快!

    http://www.youtube.com/watch?v=Dzv8CtUCchY

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      相关资源
      最近更新 更多