复合 WPF:数据模板与视图模型注入

发布于 2024-11-19 23:51:17 字数 536 浏览 4 评论 0原文

这是一个简单的问题:您使用什么将视图链接到视图模型?

基本上有两种常见的方法可以实现这一点:数据模板和视图模型注入(示例如下)。

我想知道的是,为什么您更喜欢一种方法而不是另一种方法,以及在什么情况下使用它们。精确说明您使用的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

情何以堪。 2024-11-26 23:51:17

我更喜欢使用 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

怎言笑 2024-11-26 23:51:17

我们使用视图模型优先方法,因为我们发现它更容易管理,特别是在大型企业应用程序上。我们使用 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.

っ〆星空下的拥抱 2024-11-26 23:51:17

我两者都用。 DataTemplates 适用于小型项目,但对于大型或团队项目,我们使用视图模型注入。

I use both. DataTemplates for small projects, but for larger or team projects we use view model injection.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文