实体框架 CTP5 Code First、WPF - MVVM 建模

2024-02-19

我已经为我的 WPF 应用程序设置了所有模型,并首先使用实体​​框架 ctp5 代码,这是一个示例模型类:

public class Task
{
    public int ID { get; set; }
    public int Index { get; set; }
    public string Content { get; set; }
    public int Indentation { get; set; }
    public DateTime Start { get; set; }
    public decimal Effort { get; set; }
    public decimal CompletedEffort { get; set; }
    public decimal Cost { get; set; }
}

构建视图模型的推荐方法是什么?我的视图模型将实现 INotifyPropertyChanged,我不希望模型类具有任何特定于 UI 的代码 - 以便它们可以轻松地在其他应用程序中重用。 我应该将所有模型属性设为虚拟,然后在视图模型中覆盖它们吗? (似乎有很多不必要的编码...)EF 代码首先适合这种类型的格式吗?

Edit这是一个有点类似的问题在 MVVM 中,ViewModel 或 Model 应该实现 INotifyPropertyChanged 吗? https://stackoverflow.com/questions/772214/in-mvvm-should-the-viewmodel-or-model-implement-inotifypropertychanged然而,唯一的解决方案似乎是将我认为的 UI 逻辑添加到模型中。也许我可以向模型添加某种委托,并从视图模型中挂钩,这将依次使用 INotifyPropertyChanged...类似这样的东西?

    public class Task
    {
        public delegate void HandleChange(string propertyName);
        public HandleChange ChangeHandler;

        public int ID 
        { 
            get
            {
                return ID;
            } 
            set
            {
                if(ID != value)
                {
                    ID = value;
                    ChangeHandler("ID");
                }
            }
        }
...

我正在做的是将模型类的实例创建为 ViewModel 中的属性,然后实现INotifyPropertyChanged直接在 Model 上获取 Model 属性,在 ViewModel 上仅获取 Model 实例,如下所示:

public class Task : INotifyPropertyChanged
{
    // Implementation of INotifyPropertyChanged
    // Raising the PropertyChanged event in the Setters of all properties
}

public class TaskViewModel : INotifyPropertyChanged
{
    private Task _task;
    public Task Task
    {
        get
        {
            return _task;
        }
        set
        {
            if (_task != value)
            {
                _task = value;
                RaisePropertyChanged("Task");
            }
        }
    }

    // INotifyPropertyChanged implementation
}

然后在 XAML 中我直接绑定到模型属性,例如:

<TextBox Text="{Binding Task.Content}" />

(TaskViewModel 在这里是视图的 DataContext。)

我这样做主要是为了避免你提到的“大量不必要的编码”,而且我找不到缺点。 (我也使用 EF Code-First 使我的模型持久化。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体框架 CTP5 Code First、WPF - MVVM 建模 的相关文章

  • Entity Framework 6 多对多想要插入重复行

    不应该这么难 我准备放弃EF了 我的模型有周刊版本 每个版本可以有许多分类广告 每个分类可以出现在一个或多个版本中 我的模型 public class Classifieds Key DatabaseGenerated DatabaseGe
  • ListBox.ScrollIntoView() 似乎在 WP7 中不起作用

    每当将新项目添加到项目源时 我想将列表框滚动条移动到底部 但是ScrollIntoView 如果我向它传递对新添加项目的引用或其索引 它似乎不会执行任何操作 有没有人让它工作 或者对如何将列表框向下滚动到底部有任何其他建议 一些代码 voi
  • 如何解决“指定的包含路径无效”?

    我有一个相当基本的亲子关系设置 最终结果是我希望能够通过 ASP NET MVC WebAPI 以 JSON 形式返回结果表 我正在使用实体框架 5 0 beta 2 我可以用一个简单的例子来演示我遇到的错误 鉴于课程Category an
  • 使用 RenderTargetBitmap 的 WPF 画布区域的快照

    我想在我的应用程序中创建画布区域的快照 我使用 Visual Brush 来获取快照并使用 PngEncoder 保存相同的快照 但生成的 PNG 只是一个空的黑色图像 我不确定问题是与创建的 BitmapSource 还是 PNGEnco
  • 处理 LINQ sum 表达式中的 null

    我正在使用 LINQ 查询来查找列的总和 并且在少数情况下该值有可能为空 我现在使用的查询是 int score dbContext domainmaps Where p gt p SchoolId schoolid Sum v gt v
  • PL/SQL 过程:如何返回 select 语句?

    我想创建一个存储过程 on ORACLE数据库服务器我的问题是 我不知道如何返回 select 语句 这是程序中应包含的逻辑 输入参数 过滤器1 int 过滤器2 字符串 with cte as select val1 val2 stdde
  • TabItem ContenTemplate 上 IsMouseOver 的触发器

    我对 TabItem 样式有疑问 也许你们中的某个人可以帮助我 遵循有问题的风格
  • WPF:动画不流畅

    我正在制作一个动画TextBlock 60秒后增加FontSize从 8 点到 200 点 一切工作正常 除了我的动画随着文本的增长而上下移动 为什么会发生这种情况 是否可以避免这种情况 我有一个非常简单的 XAML 文件
  • 以编程方式绑定 WPF 中的附加属性

    我在用着杰森 坎普很酷CueBanner class http www ageektrapped com blog the missing net 4 cue banner in wpf i mean watermark in wpf 对于
  • WPF 中图像的淡入淡出

    当我更改幻灯片放映等图像源时 如何实现淡入和淡出图像 我的图像从本地和网络加载 并且其数量是可变的 谢谢 您可以编写一个扩展方法 通过动画显示图像来淡出图像Opacity属性设置为 0 然后设置Source属性并最终将不透明度动画回到 1
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • 更新 EF 6 中子实体的正确方法是什么?

    必须有更好的方法来处理 EF 6 中的子保存 更新 当然 这种重复只是我的失败 Entity public partial class MyParentType public MyParentType this children new H
  • WPF 列表框不会垂直滚动

    在 Groupbox 中 我有一个 Listbox ListboxItems 也在 XAML 中定义 列表框定义为
  • Mahapps 弹出窗口未与 caliburn.micro 一起出现

    我试图使用 mahapps 和 caliburn micro 在 wpf 中显示弹出窗口 不幸的是 弹出窗口的视图未得到解析 我得到的只是弹出窗口中显示的视图模型的类型名称 我需要根据 shell 中的 ActiveItem 显示弹出窗口
  • WPF ListBoxItem 双击?

    WPF ListBox 没有 DoubleClick 事件 至少据我所知没有 是否有针对此问题的解决方法 让我双击某个项目即可让事件处理程序对其执行某些操作 感谢您的帮助 可以将带有参数的命令绑定到ListBoxItem不使用代码隐藏 or
  • WPF DataGrid 的 Items 和 ItemsSource 属性之间有什么区别?

    从我从 Intellisense 收集到的信息来看 区别在于返回类型 并且 ItemsSource 有一个 setter 而 Items 只有一个 getter 但实际上 我不明白这两个属性需要彼此分开 而不仅仅是作为一个属性 有人可以向我
  • TypeConverter 阻止 EntityFramework 中的 ApplyPropertyChanges

    我遇到了一个有趣的问题 希望不仅对我来说有趣 我正在运行 Entity Framework 1 NET 3 5 和 ASP NET MVC 2 我有一个 Customer 类 它与 Country 类具有多对一的关系 换句话说 Countr
  • Caliburn.Micro - ShowDialog() 如何关闭对话框?

    EDIT 新信息 刚刚设法让记录器工作 老实说 我不知道 cm 有一个 并且在尝试使用时收到此消息TryClose TryClose requires a parent IConductor or a view with a Close m
  • 列表元素之间的 Tab WPF

    我有一个列表框 其中每个项目都使用文本框表示 问题是我希望能够在移动到 xaml 窗口中的下一个元素之前在列表框中的所有项目之间进行切换 当前 和正常的 WPF 行为 是 当我按 Tab 键进入列表框时 第一个元素会突出显示 如果我再次按

随机推荐