.net 在M-V-VM中,我的代码去了哪里?
所以,我希望这是一个非常基本的问题 我有一个通过添加服务引用添加的web服务。它有一些方法来获取列表和数据库中特定表的详细信息 我试图做的是按如下方式设置UI: 应用程序加载 加载服务代理 调用GetList;方法在列表框控件中显示结果 用户双击列表框中的项目,显示带有详细视图的模式对话框 我对使用MVVM非常陌生,因此非常感谢您的帮助 其他信息:.net 在M-V-VM中,我的代码去了哪里?,.net,wpf,design-patterns,mvvm,.net,Wpf,Design Patterns,Mvvm,所以,我希望这是一个非常基本的问题 我有一个通过添加服务引用添加的web服务。它有一些方法来获取列表和数据库中特定表的详细信息 我试图做的是按如下方式设置UI: 应用程序加载 加载服务代理 调用GetList;方法在列表框控件中显示结果 用户双击列表框中的项目,显示带有详细视图的模式对话框 我对使用MVVM非常陌生,因此非常感谢您的帮助 其他信息: // Service Interface (simplification): interface IService { IEnumera
// Service Interface (simplification):
interface IService
{
IEnumerable<MyObject> GetList();
MyObject GetDetail(int id);
}
// Data object (simplification)
class MyObject
{
public int ID { get; set; }
public string Name { get; set; }
}
具体问题:
我的ViewModel类会是什么样子?
处理双击的代码在哪里?
在用户控件内部?
那么命令呢,这是一个很好的应用程序吗?
很抱歉说了这么多细节,但我对整个事情都很陌生,而且我没有受过足够的教育,无法提出正确的问题
我从wpf.codeplex.com上查看了MVVM示例,但有些东西对我来说还不太合适,因为它看起来非常混乱
您的虚拟机将具有:
包含绑定到列表框的项的ObservableCollection。
绑定到列表中当前选定项的CurrentItem
绑定到双击并调用逻辑以显示详细视图的DelegateCommand请参阅MVVM实现此目的的方法,类似于服务或事件聚合器的方法
调用GetList然后填充此集合的逻辑
处理双击的代码将转到上面的VM
您的虚拟机将具有:
包含绑定到列表框的项的ObservableCollection。
绑定到列表中当前选定项的CurrentItem
绑定到双击并调用逻辑以显示详细视图的DelegateCommand请参阅MVVM实现此目的的方法,类似于服务或事件聚合器的方法
调用GetList然后填充此集合的逻辑
处理双击的代码将转到上面的VM
您将有2个视图模型,因为您有2个视图 1视图模型将具有 您的服务代理 列表 ShowDetailForstring selectedItemFromList 这将创建一个新的VM2实例,并在ctor中将其传递给服务代理,并在VM2上调用ShowDetail。 2视图模型将具有 MyObject如果只是messagebox,则不需要ViewModel ShowDetailint id 拥有ViewModel后,使用WPF绑定和命令将数据从VM连接到XAML
用于用户控制的MVVM变得有点复杂,因此如果可能的话,暂时不要使用UserControls。您将有两个ViewModels,因为您有两个视图 1视图模型将具有 您的服务代理 列表 ShowDetailForstring selectedItemFromList 这将创建一个新的VM2实例,并在ctor中将其传递给服务代理,并在VM2上调用ShowDetail。 2视图模型将具有 MyObject如果只是messagebox,则不需要ViewModel ShowDetailint id 拥有ViewModel后,使用WPF绑定和命令将数据从VM连接到XAML
用于用户控制的MVVM变得有点复杂,因此如果可能,现在请远离用户控制。请参阅我的项目中的RegularExpressionViewModel示例 大部分代码都将放在ViewModel中。视图中应该包含的唯一代码是将视图的事件关联到ViewModel的代码。通常视图中不需要代码,因为大多数布线都可以通过数据绑定来处理
我使用带有依赖项注入的表示抽象层与对话框进行通信。请参阅我的项目中的RegularExpressionViewModel示例 大部分代码都将放在ViewModel中。视图中应该包含的唯一代码是将视图的事件关联到ViewModel的代码。通常视图中不需要代码,因为大多数布线都可以通过数据绑定来处理 我使用带有依赖注入的表示抽象层与对话框进行通信
MainWindow
MyObjectViewUserControl
Displays list
Opens modal window on double click