0

我正在尝试分层我的 WP 应用程序并遵循 MVVM 模式。我有一个带有 ICommand 的 VM,它在单击 View 上的按钮时运行。单击按钮现在运行 ICommand 所指向的方法,该方法使用 linq 从 DB 检索数据。

这是我的虚拟机的外观。

public class CategoryViewModel : INotifyPropertyChanged
{
    // Category type is a table in my DB. 
    private Category _currentCategory; 


    public Category CurrentCategory
        {
            get { return _currentCategory; }
            set
            {
                if (value != _currentCategory)
                {
                    _currentCategory = value;
                    OnPropertyChanged("CurrentCategory");
                }
            }
        }

// Helper method hooked with ICommand via RelayCommand class. 
// not posting RelayCommand class code here. 
private void GetCategory()
        {
            using (CategoryDBContext ctx = new CategoryDBContext(CategoryDBContext.ConnectionString))
            {
                CurrentCategory = ctx.Categories.FirstOrDefault();
            }
        }

}

这是我的视图的外观。

<TextBlock Text="{Binding CurrentCategory.CategoryName}" />
<Button Command="{Binding GetCategoryCommand}" Content="Click me"/>

我正在尝试实现一个实现通用存储库和一个工作单元类,并在某种程度上遵循本文中提到的想法。如果您现在稍微滚动到 "Creating a Generic Repository" ,您会发现使用 DbSet< TEntity > 因为它们使用的是 EF。在 WP 中相当于什么?

我怎样才能在 WP 应用程序中做类似的事情?我不想在我的虚拟机中使用任何数据访问代码。它应该去哪里?此外,我想实现通用存储库的原因是避免创建多个存储库类,如 CategoryRepositoy、ProductRepositoy 等。我的模型中已经有所有 POCO 类。

4

1 回答 1

1

如果我理解正确,您是否希望为所有获取/保存方法提供一个存储库?如果你可以用 Windows Phone 做到这一点?由于您不希望它在 VM 中,它会去哪里?

使用 get 和 set 制作基本界面,这是一个很好的起点 http://www.remondo.net/repository-pattern-example-csharp/

存储库代码不需要直接在 VM 中,但您仍应从 vm 调用它。

View = ui, Model = data, view model = 其他一切,例如获取/设置/更新/操作数据。

于 2013-05-01T18:11:51.643 回答