复合 WPF:数据模板与视图模型注入
这是一个简单的问题:您使用什么将视图链接到视图模型?
基本上有两种常见的方法可以实现这一点:数据模板和视图模型注入(示例如下)。
我想知道的是,为什么您更喜欢一种方法而不是另一种方法,以及在什么情况下使用它们。精确说明您使用的 MVVM 框架。
数据模板方式或“视图模型优先”方法 (Resources.xaml):
<DataTemplate DataType="{x:Type my:PersonViewModel}">
<my:PersonView/>
</DataTemplate>
视图模型注入方式或“视图优先”方法 (PersonView.xaml.cs):
[Import]
public PersonViewModel ViewModel
{
set
{
this.DataContext = value;
}
}
Here is the simple question: what do you use to link your views to your view models?
Basically there is 2 common ways of achieving that, data templates and view model injection (samples below).
What I would like to know is why do you prefer a method over the other and in which case you use them. Precise the MVVM framework you use.
The data template way or "View Model first" approach (Resources.xaml):
<DataTemplate DataType="{x:Type my:PersonViewModel}">
<my:PersonView/>
</DataTemplate>
The view model injection way or "View first" approach (PersonView.xaml.cs):
[Import]
public PersonViewModel ViewModel
{
set
{
this.DataContext = value;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我更喜欢使用 DataTemplates
它允许我根据属性为同一个 ViewModel 设置多个视图
我的 ViewModel 是我的应用程序,视图只不过是一个漂亮的层,它使我的视图模型变得用户友好。如果我使用 ViewModel 注入,那么视图就会成为我的应用程序,开发团队突然必须担心 UI 方面的事情
我的 ViewModel 由其他 ViewModel 管理。例如,一个 ViewModel 可能包含显示在 TabControl 中的其他 ViewModel 的集合。添加或关闭选项卡是在父 ViewModel 中完成的。使用控制应用程序状态的视图不容易完成这种事情。
我可以根据我的需要使用参数化构造函数初始化不同的 ViewModel,而不必使用通用的 Import 构造函数
函数几个原因......我确信还有其他原因,但现在没有想到
I prefer using DataTemplates
It allows me to set multiple Views for the same ViewModel based on a property
My ViewModels are my application, and the View is nothing more than a pretty layer that makes my ViewModel's User-Friendly. If I use ViewModel injection, than the Views become my application and the development team suddenly has to worry about the UI side of things
My ViewModels are managed by other ViewModels. For example, one ViewModel might contain a collection of other ViewModels that get displayed in a TabControl. Adding or Closing tabs is done within the parent ViewModel. This sort of thing is not easily accomplished with the View controlling the application state.
I can initialize different ViewModels using parameterized constructors based on my needs instead of having to use generic Import ones
That's just a few reasons... I'm sure there's others but they don't come to mind right now
我们使用视图模型优先方法,因为我们发现它更容易管理,特别是在大型企业应用程序上。我们使用 Caliburn.Micro 来处理视图位置和绑定。
We use a view model first approach because we find it easier to manage, particular on larger scale enterprise apps. We use Caliburn.Micro to take care of view location and binding.
我两者都用。 DataTemplates 适用于小型项目,但对于大型或团队项目,我们使用视图模型注入。
I use both. DataTemplates for small projects, but for larger or team projects we use view model injection.