首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

具有可编辑集合的MVVM示例,其中View不直接使用模型类型

好的,我了解了你的要求。关于具有可编辑集合的MVVM示例,以下是一个可能的实现:

首先,在ViewModel中定义一个ObservableCollection类型的属性EditableCollection,用于存储可编辑的数据集合。在ViewModelOnEditCommit事件中,将集合中的所有数据保存到数据库中,并调用RelayCommand类型的SaveData方法,以便在后台线程中执行保存操作。

接下来,在View中,使用DataTemplate来定义集合中每个元素的可编辑界面,并在ViewResources中定义一个EditableCollectionViewTemplate的模板,用于渲染可编辑集合的界面。在ViewModelOnPropertyChanged事件中,根据集合中当前编辑状态来更新EditableCollectionViewTemplate中的数据。

最后,在ViewModelSaveData方法中,将集合中的所有数据保存到数据库中,并通知ViewModelOnPropertyChanged事件,以便更新View中的数据。

以下是一个简单的示例代码:

ViewModel:

代码语言:csharp
复制
public class MyViewModel : ObservableObject
{
    private ObservableCollection<int> _editableCollection;
    public ObservableCollection<int> EditableCollection
    {
        get => _editableCollection;
        set => Set(ref _editableCollection, value);
    }

    public MyViewModel()
    {
        EditableCollection = new ObservableCollection<int> {1, 2, 3, 4, 5};
    }

    public RelayCommand<int> SaveData { get; }

    public void OnEditCommit(int item)
    {
        EditableCollection.Remove(item);
        SaveData.Execute(item);
    }
}

View:

代码语言:xaml
复制

<UserControl

代码语言:txt
复制
x:Class="MyApp.Views.MyView"
代码语言:txt
复制
xmlns:views="clr-namespace:MyApp.Views"
代码语言:txt
复制
xmlns:vm="clr-namespace:MyApp.ViewModels"
代码语言:txt
复制
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
代码语言:txt
复制
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
代码语言:txt
复制
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
代码语言:txt
复制
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
代码语言:txt
复制
xmlns:local="clr-namespace:MyApp.Views"
代码语言:txt
复制
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
代码语言:txt
复制
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
代码语言:txt
复制
xmlns:mah="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
代码语言:txt
复制
WindowTransitionsEnabled="False"
代码语言:txt
复制
mc:Ignorable="d"
代码语言:txt
复制
Title="My App"
代码语言:txt
复制
Height="850"
代码语言:txt
复制
Width="1800"
代码语言:txt
复制
WindowStartupLocation="CenterScreen"
代码语言:txt
复制
Loaded="Window_Loaded"
代码语言:txt
复制
Style="{StaticResource DefaultWindow}">
代码语言:txt
复制
<Window.DataContext>
代码语言:txt
复制
    <vm:MyViewModel />
代码语言:txt
复制
</Window.DataContext>
代码语言:txt
复制
<Window.Resources>
代码语言:txt
复制
    <local:EditableCollectionViewTemplate x:Key="EditableCollectionViewTemplate" />
代码语言:txt
复制
</Window.Resources>
代码语言:txt
复制
<mah:MetroWindow.RightWindowCommands>
代码语言:txt
复制
    <mah:WindowCommands>
代码语言:txt
复制
        <Button x:Name="cmdMinimize"
代码语言:txt
复制
                Style="{StaticResource WindowMinimizeButton}" />
代码语言:txt
复制
        <Button x:Name="cmdMaximize"
代码语言:txt
复制
                Style="{StaticResource WindowMaximizeButton}" />
代码语言:txt
复制
        <Button x:Name="cmdExit"
代码语言:txt
复制
                Style="{StaticResource WindowExitButton}" />
代码语言:txt
复制
    </mah:WindowCommands>
代码语言:txt
复制
</mah:MetroWindow.RightWindowCommands>
代码语言:txt
复制
<Grid>
代码语言:txt
复制
    <Grid.ColumnDefinitions>
代码语言:txt
复制
        <ColumnDefinition Width="*" />
代码语言:txt
复制
        <ColumnDefinition Width="auto" />
代码语言:txt
复制
    </Grid.ColumnDefinitions>
代码语言:txt
复制
    <Grid.RowDefinitions>
代码语言:txt
复制
        <RowDefinition Height="auto" />
代码语言:txt
复制
        <RowDefinition Height="*" />
代码语言:txt
复制
    </Grid.RowDefinitions>
代码语言:txt
复制
    <Grid Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" Panel.ZIndex="1">
代码语言:txt
复制
        <Grid.ColumnDefinitions>
代码语言:txt
复制
            <ColumnDefinition Width="*" />
代码语言:txt
复制
        </Grid.ColumnDefinitions>
代码语言:txt
复制
        <Grid.RowDefinitions>
代码语言:txt
复制
            <RowDefinition Height="auto" />
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WPF面试题-来自ChatGPT解答

值转换器通常用于以下情况: 数据类型转换:当绑定源数据类型与目标属性类型匹配时,值转换器可以将源数据转换为目标类型,以便正确地显示或使用。...View应该尽量保持简单,只关注界面的展示和用户交互,涉及具体业务逻辑。...MVVM 优势 MVVM模式具有以下几个优势: 分离关注点:MVVM模式将应用程序用户界面(视图)与业务逻辑(模型)分离,通过视图模型(ViewModel)进行交互。...这种分离使得代码更加清晰、维护和测试。开发者可以专注于视图和模型开发,而不需要关注它们之间交互逻辑。 重用性:MVVM模式鼓励将业务逻辑放在模型中,将视图逻辑放在视图模型中。...这种数据绑定机制减少了手动编写大量代码来处理数据传递和更新,提高了开发效率。 命令系统:MVVM模式引入了命令系统,使得视图可以直接与视图模型进行交互。

37830

一篇可能会让你爱上MVVM与ReactiveCocoa文章

关于MVVM,网上还有一种观点是,其实可以不要Model层,直接使用ViewModel层来存储数据.个人感觉,如果考虑到单元测试,此时如果有单独Model部分,可以根据一个Model,直接测试ViewModel...为View数据模型: Model --> Model + ViewModel 我观点是,尽量不要使用系统自带数据类型,比如数组,字典等作为Model,要尽可能地使用自定义地类.使用自定义类,方便后期维护...,也可以避免一些基础错误,如:自定义类,如果属性匹配会编译失败,但是如果使用字典类型,key匹配时,是不会有任何提示(用过字典童鞋,都懂我意思吧).所以我们此处要: 新增Model: YFCategoryArticleListModel...我们成功从控制器中剥离了网络请求以及数据分页相关代码.从整体代码量角度,我们可能没少写几行代码;但是从代码复用性角度考虑,我们代码更具有复用性,因为将来可能其他地方也会用到这个页面;与此同时...YFBlogDetailViewModel 文章详情页视图模型. 添加属性content,用于直接在网页视图上显示,View内检测这个属性值,动态刷新视图即可.

1.3K60
  • iOS面试题:MVVM和MVC区别

    MVVM和MVC区别 1. MVC MVC弊端 厚重View Controller M:模型model对象通常非常简单。根据Apple文档,model应包括数据和操作数据业务逻辑。...V:视图view通常是UIKit控件(component,这里根据习惯译为控件)或者编码定义UIKit控件集合。...都不能直接引用model,而是引用视图模型(viewModel) viewModel 是一个放置用户输入验证逻辑,视图显示逻辑,发起网络请求和其他代码地方 使用MVVM会轻微增加代码量,但总体上减少了代码复杂性...:基本要求,必须满足) viewModel 引用model,但反过来不行* MVVM 使用建议 MVVM 可以兼容你当下使用MVC架构。...转化之后数据在大部分情况是不能直接被展示,为了能够被展示,还需要第二次转化。 只有在API返回数据高度标准化时,这些对象原型(Item)复用程度才高,否则容易出现类型爆炸,提高维护成本。

    1.4K30

    【愚公系列】2023年11月 WPF控件专题 2023秋招WPF高频面试题

    此模式允许将操作请求与实际执行操作对象分离,换句话说,命令模式将操作表示为对象。 Command 对象包含要执行功能。 这消除了命令定义和功能之间直接联系,并促进了松散耦合。...MVVM 设计模式派生自任何基于 WPF 类。 ViewModel 直接知道ViewView 和 ViewModel 之间通信是通过一些属性和绑定进行。...ICommand 在 MVVM 中经常使用,它提供了View和ViewModel(用户界面和业务逻辑)之间分离逻辑。 XAML 提供了一种通过 ICommand 更好地绑定 GUI 事件方法。...它还为视图提供了更新模型/视图模型机制。 25.什么是冻结对象?Freezable 是一种特殊类型对象,具有两种状态:unfrozen 和 frozen。...26.什么是MVVM?MVVM(Model View ViewModel)是一个在WPF中制作应用框架。 MVVM 与 MVC 框架相同。 它是一个三层架构,我们可以使用 MVVM 进行松耦合开发。

    47322

    软考高级架构师:MVVM 架构风格概念和例题

    一个典型应用场景是在开发具有复杂用户界面的应用程序时,如使用XAMLWPF、Silverlight、Xamarin或者是使用HTML和JavaScriptWeb应用程序。...增加了应用程序响应时间 在MVVM架构中,如何实现数据双向绑定? A. 通过View直接修改Model B. 使用ViewModel作为桥梁,自动同步View和Model数据 C....不需要同步,数据自然一致 MVVM模式适用于哪种类型应用程序开发? A. 只有命令行界面的应用程序 B. 包含用户界面的后台服务 C. 具有复杂用户界面的应用程序 D....所有类型应用程序都不适用 MVVMViewModel可以直接操作数据库吗? A. 是 B. 否 C. 只有在特定情况下 D....在MVVM架构中,当数据模型发生改变时,更新UI工作主要是由ViewModel来完成。ViewModel将监听到数据变更转换为视图可以直接使用数据,然后通知View更新界面。

    17400

    Asp.net mvc 知多少(一)

    聚合定义了一组具有内聚关系相关对象集合,我们把聚合看作是一个修改数据单元。领域模型:聚合、聚合根详解。 Service(服务):服务是在应用程序中用来处理业务逻辑。...同时它也处理和接收传入请求。 MVP模式通常用在Asp.net Web Form、Windows Form 应用程序 MVP模式关键点: 用户与View直接交互....View 非常薄,部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。 Q5. 解释一下MVVM 模式? ?...MVVM 是指 Model-View-View Model. MVVM支持在View与ViewModel之间进行双向数据绑定。通过视图模型状态就能够自动传播改动到View。...MVVM模式关键点: 用户与View直接交互。 View与ViewModel是1对多关系,一个View可以对应多个ViewModel。

    2.2K70

    关于 MVVM和MVC这些,你知道吗?

    MVVM 就是将其中View状态和行为抽象化,让我们将视图 UI和业务逻辑分开。...在MVC框架中,View是可以直接访问Model(JSP里直接使用JavaBean),这样不可避免使View里面也需要包括一些业务逻辑,同时还需要Model保持不变,而Model又对应着多个不同显示...[^4] Presenter与View也是没有直接相关联,而是通过已定义接口进行交互,从而使得在变更View时候可以保持Presenter不变,即保证了Presenter重用性(接口复用性...其次,绑定在一个ViewModel上面的多个View都可以使用ViewModel里面的视图逻辑,完成了框架重用性特性。...除此之外,MVVM框架还具有独立开发、测试等特性,把框架作用发挥到最大化,也因此成为了开发者们青睐框架。。

    78400

    关于 MVVM和MVC一些总结

    MVVM 就是将其中View状态和行为抽象化,让我们将视图 UI和业务逻辑分开。...在MVC框架中,View是可以直接访问Model(JSP里直接使用JavaBean),这样不可避免使View里面也需要包括一些业务逻辑,同时还需要Model保持不变,而Model又对应着多个不同显示...其次,绑定在一个ViewModel上面的多个View都可以使用ViewModel里面的视图逻辑,完成了框架重用性特性。...除此之外,MVVM框架还具有独立开发、测试等特性,把框架作用发挥到最大化,也因此成为了开发者们青睐框架。。...对于MVVM这种模式主要用于构建基于事件驱动 UI 平台,对于前端开发领域中数据与界面相混合情况特别适用,其中 Model 仅仅只是代表应用程序所需数据信息,它不关注任何行为; View 是软件中与用户进行直接交互部分

    2.6K30

    架构之路 (五) —— VIPER架构模式(一)

    这个示例使用是Pixabay,这是一个获得许可照片共享站点。要将图像拉入应用程序,您需要创建一个免费帐户并获得一个API密钥。...使用这种方法,你在storyboard中定义View,Controller是一个关联UIViewController子类。控制器Controller修改视图,接受用户输入并直接模型交互。...MVVM是一种流行体系结构,在View Model中它将视图逻辑与业务逻辑分离开来。视图模型模型Model交互。...最大区别是,视图模型View Model与视图控制器不同,它只有对视图和模型单向引用。MVVM非常适合SwiftUI。 VIPER更进一步,将视图逻辑与数据模型逻辑分离。...$trips创建一个发布者publisher,用于跟踪对数据模型trips集合更改。

    17.4K10

    C# WPF MVVM开发框架Caliburn.Micro入门介绍①

    MVVMView Model在Model和View之间扮演着值转换器角色,把Model数据交给View去绑定,把View数据提交给Model;同时也要实现mediator设计模式,成为View...聚合器遵循总线样式发布/子模型。您向聚合器注册了一个消息处理程序,它会向您发送您感兴趣任何消息。您可以通过实现IHandle来声明您对特定消息类型兴趣。...因此,给定与上面相同模型,但使用View.Context=“Master”我们将搜索MyApplication.Views.Shell.Master。当然,所有这些都是定制。...View Model 定位器 尽管Caliburn.Micro支持ViewModel First方法,但我们也通过提供与ViewLocator具有相同映射语义ViewModelLocator来支持View...我们希望编写优雅测试维护扩展表示层代码……我们希望这样做很容易。这就是为什么。如果您更喜欢使用监控控制器和被动查看而不是MVVM,请继续。

    1.7K20

    .Net5 WPF快速入门系列教程

    应用行业、未来发展】 2.XAML布局【布局在WPF中是最基础也是最重要一环,它直接决定你界面的样子。...然而,命令实际上包含执行应用程序任务代码。】 6.MVVM模式【MVVM是一种开发模式,是一种开发标准。...在WPF中应用到MVVM是非常常见MVVM全称为Model、View、ViewModel。】...每个元素都有Resources属性,该属性存储了一个资源字典集合(它是ResourceDictionary类实例)。资源集合包含任意类型对象,根据字符串编写索引。...11.项目【新手快速入门最后一章,主要讲解企业级项目中结构、一款客户端应用程序我们该如何去设计、Nuget使用、 完成一个具有播放器基础功能项目。】

    1.5K30

    正确认识 MVCMVPMVVM

    在 MVC 里,View 被设计为嵌套使用了组合(Composite)模式来实现。...View 和 Model 直接通信了,而统一通过 Controller 实现数据传递。Model 将结果告知 Controller,Controller 再去更新 View。...在交互上,早期 MVC,View直接依赖于 Model ,因此,View 复用性其实是受限制。另外,这种模式其实也不适用于前后端分离 Web 程序。...因此,发展出了变种 MVC,将 View 和 Model 直接依赖切断,统一通过 Controller 进行调度,从而提高了 View 复用性,以及也可以将 MVC 扩展应用到前后端分离 Web...(Model View) 一般情况下,在视图中只显示而无需编辑数据用单向绑定,需要编辑数据才用双向绑定。

    2.6K33

    聊聊iOS开发之MVVM架构设计

    Controller夹在View和ViewModel之间做其中一个主要事情就是将View和ViewModel进行绑定....对于一个界面来说,有时候View和ViewModel往往不止一个,MVVM也可以组合使用MVVM 基本概念 - 在MVVM 中,viewview controller正式联系在一起,我们把它们视为一个组件...- 使用MVVM会轻微增加代码量,但总体上减少了代码复杂性。 MVVM 注意事项 - viewController 尽量涉及业务逻辑,让 viewModel 去做这些事情。...通常我们会期待展现 dataSource 是数据-模型对象。同时你可能已经对其感到奇怪, 因为我们试图通过 MVVM模式暴漏数据-模型对象。 (前面提到过)。...可以看出视图 SUGoodsCell直接引用了模型SUGoods,这就有悖了MVVM初衷:viewview controller 都不能直接引用model,而是引用视图模型(viewModel)

    8.8K92

    “老坛泡新菜”:SOD MVVM框架,让WinForms焕发新春

    火热MVVM框架 最近几年最热门技术之一就是前端技术了,各种前端框架,前端标准和前端设计风格层出穷,而在众多前端框架中具有MVC,MVVM功能框架成为耀眼新星,比如GitHub关注度很高Vue.js...最近研究改善Web前端开发技术,Vue.js框架MVVM思想再一次让我觉得WinForms上MVVM技术必要性,发现要实现MVVM框架其实并不难,关键在于模型(Model)和视图(View双向绑定...MVVMModel提供给View 做为被绑定对象,因此要我们只需要解决WinForms 形式View 元素如何实现绑定操作,那么我们WinForms 应用即可实现MVVM功能了。...运行解决方案 经过上面的过程,我们添加了视图元素,设置好了视图元素数据绑定,创建了模型和视图模型对象,一个简单MVVM示例程序就好了,下面是运行效果图: ?...SOD WinForms MVVM支持 自SOD框架版本 5.6.0.1111 发布这个“光棍节“版本中,您已经可以在此以后版本中获得直接WinForms MVVM支持,如果是之前版本,那么需要本示例程序一样稍微多做一点工作

    3.7K60

    安卓开发中Model-View-Presenter(MVP模式)

    尽管这些体系结构(尤其是MVVM)实现了分离组件并使其测试和重用目的,但我们仍然发现了一些问题,使我们自问这是否是我们可以使用最佳体系结构。...对于MVVM,虽然ViewModel不知道View,但是View知道ViewModel,这使得重用具有不同ViewModel视图变得复杂。...为了说明我在本文中解释内容,参考GitHub上一个小示例/项目(纯模型-视图-演示者):Pure MVP in GitHub.。...View 在Android中,我们视图实现将对应于一个活动或一个片段(在示例/项目中是片段),但它可以是一个ViewModel,甚至是一个可视化组件。...此外,这个视图模型可以直接将数据绑定注入到XML中,并使用LiveData将可视化组件绑定到LiveData可观察对象。

    1.6K30

    WPF 常用框架整理

    MVVM即Model-View-ViewModel,MVVM模式与MVP(Model-View-Presenter)模式相似,主要目的是分离视图(View)和模型(Model),具有低耦合、重用性...、独立开发、测试 MVVM框架有很多,开源主要有: PRISM:由微软提供,和MEF/Unity一起用于依赖注入,支持组合命令,可以扩展。...更多信息请看这里,另外可以参考VS和Expression Blend使用教程。...Simple MVVM Toolkit:提供VS项目和项模板,依赖注入,支持深拷贝以及模型和视图模型之间属性关联。 Catel:包含项目和项模板,用户控件和企业类库。...其中最常用也就是:PRISM、MVVM Light和Caliburn Micro 以下是Caliburn Micro和PRISM框架搭建方法 C#WPF MVVM框架Caliburn.Micro从零搭建

    2.2K10

    Vue3学习笔记(一)——MVC与vue3概要、模板、数据绑定与综合示例

    正如上所说,更新视图需要 Presenter 层直接持有 View 层,并通过调用 View 层中方法来实现,还是需要一系列复杂操作,有没有什么机制自动去更新视图而不用我们手动去更新呢,所以,MVVM...1.3、MVVM (Model View ViewModel) MVVM 模式将程序分为三个部分:模型(Model)、视图(View)、视图模型View-Model)。...Vue与Angular就是一个MVVM框架,MVVM与MVC最大区别是模型与视图实现了双向绑定。...对简单UI 来说,实现 MVVM 模式开销是不必要,而对于大型应用来说,引入 MVVM 模式则会节约大量手动更新视图复杂过程,是否使用,还是看使用场景。...函数是多种排序算法集合,数组在原数组上进行排序,生成副本。

    3.5K20

    如何构建Android MVVM 应用框架

    View和Controller两个角色,直接导致Activity中代码大爆炸。...复杂业务同时也可能会导致P层太大,代码臃肿问题依然不能解决。 MVVM View: 对应于Activity和XML,负责View绘制以及与用户交互。 Model: 实体模型。...复用性 一个ViewModel可以复用到多个View中。同样一份数据,可以提供给不同UI去做展示。对于版本迭代中频繁UI改动,更新或新增一套View即可。...在MVVM中数据是直接绑定到UI控件上(部分数据是可以直接反映出UI上内容),那么我们就可以直接通过修改绑定数据源来间接做一些Android UI上测试。...简单地说:View层不做任何业务逻辑、涉及操作数据、处理数据,UI和数据严格分开。

    4.5K60
    领券