c# - 我应该通过绑定(bind)使用 MVP 和 WPF 显示数据吗?

标签 c# wpf mvvm data-binding mvp

我正在写一篇关于代码设计的论文,我正在比较 MV-C、P 和 VM,看看哪个最适合 WPF。在我的研究中,我意识到 MVVM 是其他标准中数据绑定(bind)的明显选择原因。

即使我知道这一点,我也必须在某种意义上“证明”这一点,所以我在 MVP 和 MVVM 中创建了一个应用程序,它做的事情完全相同,但处理代码的方式不同。有了这个,我将解释这些代码模式的优缺点,但是在我使用 MVP 应用程序创建时,我遇到了一个问题。

我有一个带有“商业逻辑”的模型,我的演示者创建了我的 View 可以显示的这些模型对象的列表。

我的问题是我如何显示它们

在 MVVM 中,我将列表绑定(bind)到 ListBox因为这就是 MVVM 的“制作”方式。
例如

<Window.Resources>
  <DataTemplate DataType="{x:type model:Mymodel}">
    //Some DataTemplate Definition
  </DataTemplate>
</Window.Resources>

然后绑定(bind)到我的Listbox
<ListBox ItemSources={Binding someProperty} />

它没有完全编码,但你得到了手势

但是如果我理解正确的话,绑定(bind) MVP不是应该的样子。

你不应该在 MVP 中绑定(bind)任何东西,因为这不是它应该如何工作的,或者我在这里错了吗?

因此,如果我不应该绑定(bind)数据,如何在 ListBox 中显示我的模型对象列表?所以它没有说
Model Object
Model Object
Model Object
Model Object

我知道您应该将 MVVM 用于 WPF,但为了证明为什么它更好,我需要展示 MVP 如何也可以在 WPF 中工作。

最佳答案

当您使用 WPF 时,正如您所说,通过数据绑定(bind)与 MVVM 一起工作。 MVP 通常与没有数据绑定(bind)可用的 Windows 形式一起使用。如果您希望您的应用程序具有相同的功能并使用相同的技术 (WPF),则无法避免使用绑定(bind),或者至少更难做到。只要您通过演示者与您的模型交谈,您仍然在使用 MVP。您可以自己决定是否要使用

  • 被动 View - 演示者处理 View 和模型之间的所有对话
  • 主讲人 - View 知道模型,演示者处理“困难代码”,这在 View 和模型之间需要处理很多。

  • 如果您正在使用绑定(bind),我会说(不确定)您正在使用 主讲人 这不是“推荐”的,但也不推荐在 WPF 中使用 MVP 所以......

    编辑示例

    例如,如果您想显示一个列表,您需要有一个界面,该界面具有包含您要显示的对象的列表属性。
    public interface myinterface
    {
      ObservableCollection<YourModel> ListName {get; set;}
    }
    

    然后在您的演示者中,只需将数据“推送”到该列表
    private myinterface _my;
    public Presenter(myinterface my)
    { this._my = my;}
    
    _my.ListName = // Add whatever Data you want into this list.
    

    在你看来
    <ListBox ItemSource ={Binding ListName}>
      <ListBox.ItemTemplate>Set how you want to display the list</ListBox.ItemTemplate>
    

    这是一个不清楚的示例,但希望可以让您了解 MVP 如何与 WPF 一起工作(以一种小的方式)

    关于c# - 我应该通过绑定(bind)使用 MVP 和 WPF 显示数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43867099/

    相关文章:

    c# - 以编程方式将按钮添加到wpf中的工具栏

    c# - 为什么这个 C# 代码产生两次输出

    c# - 程序集 'System.Web.Http, ...' 使用版本高于引用程序集的 'Newtonsoft.Json, Version=6.0.0.0...'

    events - Mvvm TextBox KeyDown 事件

    c# - 我应该在 MVVM 或 ViewModel 中的用户控制代码中创建图形对象吗?

    c# - 如何创建动态查询?

    wpf - 如何设置 wpf slider 控件的拇指高度

    c# - 可以将 View 模型声明为 View 中的静态资源吗?

    c# - 使用 WPF 绘制家谱

    c# - WPF Canvas Children Bind ObservableCollection 可以包含不同形状和 TextBlocks 的 ViewModel 吗?