使用 MVVM 分配数据上下文的最佳方法是什么?

发布于 2024-11-04 23:41:11 字数 240 浏览 0 评论 0原文

我一直在寻找设置数据上下文属性的最佳方法。我发现了三种方法

  1. 在视图上分配数据上下文(在 XAML 上或隐藏代码上)。

  2. 通过构造函数在 ViewModel 上分配数据上下文。

  3. 使用一些配置,通过一些基础设施类在运行时获取视图和视图模型引用并绑定数据上下文。

就松散耦合性和可维护性而言,哪一个是最佳选择?或者有什么最好的方法吗?

I was looking for best approach to set data context property. I found three ways

  1. Assign data context on View (either on XAML or code behind).

  2. Assign data context on ViewModel through constructor.

  3. Use some configuration that takes view and view model reference and bind data context on run time through some infrastructure classes.

Which is the best option among this in terms of loosely coupled, maintainable? Or Is there any best approach?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(2

花开雨落又逢春i 2024-11-11 23:41:11

我个人喜欢这种方法,因为它使我必须编写更少的代码:)。每当 wpf 控件需要以可视方式呈现 ViewModel 时,它基本上使用 IValueConverter 来查找要使用的视图,并且 IValueConverter 为您设置数据上下文。它还向您展示了如何创建一个数据模板,允许您要求 WPF 默认使用此转换器,如下所示:

<DataTemplate DataType="{x:Type ViewModels:ViewModelBase}">
    <ContentControl Content="{Binding Converter={StaticResource MyConverter}}"/>
</DataTemplate>

I personally like this approach because it makes me have to write less code :). It basically uses an IValueConverter to lookup which view to use whenever a wpf control needs to present a ViewModel visually and the IValueConverter sets the datacontext for you. It also shows you how to create a datatemplate that allows you to require WPF to utilize this converter by default, something like this:

<DataTemplate DataType="{x:Type ViewModels:ViewModelBase}">
    <ContentControl Content="{Binding Converter={StaticResource MyConverter}}"/>
</DataTemplate>
你对谁都笑 2024-11-11 23:41:11

4.方式是DataTemplate。

我认为最好的方法是最适合您当前情况的方法。

如果我有viewmodel第一个动态场景,我使用datatemplate/contentpresenter或首先使用view,我会采取你的方式,依此类推...

the 4. way would be a DataTemplate.

i think the best approach is the one which fits best in your current situation.

if i have viewmodel first dynamic scenarios i use datatemplate/contentpresenter or with view first i take your way one and so on...

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