- 博客(48)
- 资源 (13)
- 收藏
- 关注
原创 【WPF】Prism学习(十)
Prism库提供了一个基础类BindableBase,这个类实现了`INotifyPropertyChanged`接口。这个接口允许ViewModel(视图模型)通知视图(View)当属性(Property)发生变化时,以便视图可以更新显示。
2024-11-20 09:08:23
1894
原创 【WPF】Prism学习(九)
强调了ContainerLocator的延迟创建特性,以及如何通过委托来设置容器实例。同时,提醒开发者在设置委托后需要调用相关方法,否则之前设置的委托可能会被新的调用覆盖。这是在使用ContainerLocator时需要注意的一个关键点。在使用高级API时需要谨慎,并在单元测试中重置ContainerLocator以确保容器被正确释放和清理。这对于确保测试的准确性和可靠性非常重要。
2024-11-20 09:06:58
1543
原创 【WPF】Prism学习(八)
Prism容器扩展现在会非常刻意地捕获任何底层容器异常,并抛出一个`ContainerResolutionException`。
2024-11-19 08:41:26
1398
原创 【WPF】Prism学习(七)
在应用程序中,有些服务会被多次使用。如果每次都创建一个新的实例,这将不利于内存管理。因此,更好的做法是将这些服务注册为单例,这样它们就可以在整个应用程序中被重复使用。
2024-11-19 08:38:26
1340
原创 【WPF】Prism学习(六)
Prism是一个流行的.NET框架,用于构建基于MVVM模式的应用程序,它支持依赖注入,这有助于构建可维护和可测试的应用程序,并减少对静态和循环引用的依赖。:Prism框架提供了几种不同的DI容器实现,这些容器实现了Prism的IoC(控制反转)抽象。
2024-11-18 09:16:31
1498
原创 【WPF】Prism学习(四)
命令(Commands)实际上是一种事件处理器(EventHandler)。这意味着,如果一个命令被设计为异步执行,那么在命令还在执行的过程中,可能会被多次调用。
2024-11-16 11:38:50
1341
原创 【WPF】Prism学习(二)
当用户与控件交互时,控件会自动调用目标命令,如果提供了命令参数,它将作为参数传递给命令的 Execute 方法。
2024-11-15 13:28:36
1959
原创 【WPF】Prism库学习(一)
Prism是一个强大的框架,它通过提供一系列设计模式和跨平台的共享代码库,帮助开发者构建高质量的XAML应用程序。Prism 9的发布进一步强化了这一点,通过统一不同平台的API,使得代码迁移和重用变得更加容易。
2024-11-15 13:27:44
950
原创 【开源库学习】libodb库学习(十二)
当我们添加新的持久类或更改现有的持久类时,例如,通过添加或删除数据成员,存储新对象模型所需的数据库模式也会发生变化。同时,我们可能有包含现有数据的现有数据库。如果应用程序的新版本不需要处理旧数据库,那么模式创建功能就是您所需要的。然而,大多数应用程序都需要使用同一应用程序旧版本存储的数据。我们将称数据库模式演化为更新数据库以匹配对象模型中的更改的总体任务。模式演化通常由两个子任务组成:模式迁移和数据迁移。架构迁移会修改数据库架构,使其与当前对象模型相对应。例如,在关系数据库中,这可能需要添加或删除表和列。
2024-07-29 08:50:07
493
原创 【开源库学习】libodb库学习(十一)
考虑一下在上面的例子中,如果在我们等待用户输入的同时,另一个进程更新了该人的姓氏,会发生什么。一旦我们收到用户的输入,我们就会继续更新对象,用新的(正确)覆盖旧的年龄,用旧的(不正确)覆盖新的名称。也就是说,如果我们在数据库事务中加载一个对象并在同一事务中更新它,那么我们可以保证我们在数据库中更新的对象状态与我们加载的状态完全相同。在我们的示例中,这意味着在一个数据库事务中加载对象,等待用户输入,然后在另一个数据库交易中更新对象。最后,请注意,对于具有乐观并发模型的持久类,如果数据库中没有这样的对象,则。
2024-07-22 15:55:24
1062
原创 【开源库学习】libodb库学习(十)
ODB可以使用自定义会话实现,而不是默认的。应用程序提供自己的会话可能有多种原因。例如,应用程序可能已经包含对象缓存或注册表的概念,ODB可以重复使用。自定义会话还可以提供其他功能,例如自动更改跟踪、延迟数据库操作或对象驱逐。最后,使用的每线程会话方法可能并不适用于所有应用程序。例如,有些可能需要一个可以在多个线程之间共享的线程安全会话。有关通过保留对象的原始副本来实现自动更改跟踪的自定义会话的示例,请参阅odb-tests中的测试。要使用自定义会话,我们需要使用ODB编译器命令行选项指定其类型。
2024-07-22 15:54:58
1169
原创 【开源库学习】libodb库学习(九)
ODB视图是一个C++类或结构类型,它体现了一个或多个持久对象或数据库表或本机SQL查询执行结果的轻量级只读投影。视图的一些常见应用包括从数据库表的对象或列加载数据成员的子集,执行和处理任意SQL查询的结果,包括聚合查询和存储过程调用,以及使用对象关系或自定义连接条件连接多个对象和/或数据库表。许多关系数据库也定义了视图的概念。但是请注意,ODB视图不会映射到数据库视图。相反,默认情况下,ODB视图被映射到SQL SELECT查询。但是,如果需要,可以很容易地创建基于数据库视图的ODB视图。
2024-07-21 17:56:25
887
原创 【开源库学习】libodb库学习(八)
为什么我们需要将数据成员分组到不同的节?为什么在必要时不能独立加载和更新每个数据成员?这一要求的原因是,用单个数据库语句加载或更新一组数据成员比用单独的语句加载或升级每个数据成员要高效得多。因为ODB准备并缓存用于加载和更新持久对象的语句,所以为需要一起加载或更新的特定数据成员集生成自定义语句也不是一种可行的方法。
2024-07-21 17:55:53
744
原创 【开源库学习】libodb库学习(七)
在上面的例子中,employee和contractor类都继承了person基类的first_和last_数据成员以及first()和last()访问器。这种继承风格的一个共同特征,从现在开始称为重用继承,是基类中缺少虚拟函数和虚拟析构函数。同样,采用这种风格,应用程序代码通常是根据派生类而不是基类编写的。在C++中利用继承的第二种方法是通过公共接口提供多态行为。在这种情况下,基类定义了许多虚拟函数,通常还有一个虚拟析构函数,而派生类则提供了这些虚拟函数的特定实现。
2024-07-20 16:05:05
784
原创 【开源库学习】libodb库学习(六)
复合值的成员可以是其他值类型(简单或复合)、容器(第5章,“容器”)和指向对象的指针(第6章,“关系”)。同样,复合值类型可以在对象成员中使用,作为容器的元素,也可以作为另一种复合值类型的基础。特别是,复合值类型可以用作集合容器中的元素类型(第5.2节,“集合和多集合容器”),也可以用作映射容器中的键类型(第5.3节,“映射和多映射容器”)。用作容器元素的复合值类型不能包含其他容器,因为不允许使用容器的容器。它允许我们将现有的C++类型包装到一个类似容器的类中,该类可以是NULL,也可以包含包装类型的值。
2024-07-20 16:04:27
1091
原创 【开源库学习】libodb库学习(五)
虽然ODB运行时和配置文件库为大多数广泛使用的指针提供支持,但添加对自定义智能指针的支持也很容易。为了实现这一点,您需要为指针实现类模板专门化。第一步是确定指针类型,因为专门化的接口会根据指针类型而变化。支持的指针类型有:原始指针(原始指针或等效指针,即非托管指针)、唯一指针(不支持共享的智能指针)、共享指针(支持共享的智慧指针)和弱指针(共享指针的弱对应指针)。这些指针中的任何一个都可以是惰性的,这也会影响专门化的接口。
2024-07-19 08:57:32
806
原创 【开源库学习】libodb库学习(四)
虽然ODB运行时和配置文件库提供了对各种容器的支持,但也很容易持久化自定义容器类型或从其中创建更改跟踪版本。为了实现这一点,您需要为您的容器实现类模板专门化。首先,确定容器类型的容器类型(有序、集合、多集合、映射或多映射)。然后使用公共ODB运行时库(libodb)中的一个标准C++容器的专门化作为您自己实现的基础。一旦容器的容器特征专门化准备就绪,您将需要使用选项将其包含在ODB编译过程中,并使用选项将其包括在生成的头文件中。例如,假设我们有一个哈希表容器,我们在文件中实现了特征专门化。
2024-07-19 08:56:46
1166
原创 【开源库学习】libodb库学习(三)
如果我们不知道我们正在寻找的对象的标识符,我们可以使用查询在数据库中搜索符合特定条件的对象。ODB查询功能是可选的,我们需要使用ODB编译器选项显式请求生成必要的数据库支持代码。它编译良好,只有在数据库系统执行时才会触发错误。
2024-07-18 13:56:39
1510
原创 【开源库学习】libodb库学习(二)
前面的章节为我们提供了ODB的高级概述,并展示了如何使用它在数据库中存储C++对象。在本章中,我们将更详细地研究ODB对象持久性模型以及核心数据库API。我们将从第1节和第3节中的基本概念和术语开始,并继续讨论第4节中的odb::数据库类、第5节中的事务和第6节中的连接。本章的其余部分将讨论核心数据库操作,并在最后讨论ODB异常。在本章中,我们将继续使用和扩展我们在上一章中开发的person持久类。
2024-07-18 10:48:11
1157
原创 【开源库学习】libodb库学习(一)
使用传统的“Hello World”示例展示如何创建一个依赖于ODB进行对象持久化的简单C++应用程序。特别是,我们将讨论如何声明持久类、生成数据库支持代码以及编译和运行我们的应用程序。我们还将学习如何使对象持久化,加载、更新和删除持久化对象,以及在数据库中查询符合特定条件的持久化对象。该示例还展示了如何定义和使用视图,这是一种允许我们创建持久化对象、数据库表的投影,或处理本机SQL查询或存储过程调用结果的机制。
2024-07-17 16:03:13
1148
原创 【QT error】C2664: “bool QObject::setProperty(..,..)“无法将参数2从“bool“转换为“const QVariant &“
C2664: “bool QObject::setProperty(..,..)"无法将参数2从"bool"转换为"const QVariant &"
2023-09-27 15:01:53
460
原创 【WPF】Pack URI 用于加载文件的统一资源标识符
例如,WPF 中不支持下面的格式。下面的示例演示了一个 XAML 资源文件的 pack URI,该资源文件位于特定于版本的引用程序集的项目文件夹的根文件夹中。下面的示例演示了一个 XAML 资源文件的 pack URI,该资源文件位于所引用程序集的项目文件夹的子文件夹中。下面的示例演示了一个 XAML 资源文件的 pack URI,该资源文件位于本地程序集的项目文件夹的子文件夹中。下面的示例演示了一个 XAML 资源文件的 pack URI,该资源文件位于所引用程序集的项目文件夹的根目录中。
2023-09-18 14:13:44
352
原创 【WPF】数据绑定
数据绑定是在应用 UI 与其显示的数据之间建立连接的过程。如果绑定具有正确的设置,并且数据提供适当的通知,则在数据更改其值时,绑定到该数据的元素会自动反映更改。数据绑定还意味着,如果元素中数据的外部表示形式发生更改,则基础数据可以自动进行更新以反映更改。例如,如果用户编辑TextBox元素中的值,则基础数据值会自动更新以反映该更改。
2023-09-14 15:22:21
420
原创 【WPF】使用ControlTemplete制作圆形按钮并添加动画效果
例如,如果在应用程序定义 XAML文件的根元素中声明模板,则该模板可以在应用程序中的任何位置使用。换言之,设置控件属性后,该值将传递到包含 TemplateBinding 的元素。接下来,在控件模板的 根中,添加 <VisualStateManager.VisualStateGroups>,其中包含 CommonStates 的 VisualStateGroup。请注意,Ellipse 元素的 Fill 和 Stroke 属性绑定到了控件的 Foreground 和 Background 属性。
2023-09-14 11:09:24
1070
原创 【QT】Fault tolerant heap shim applied to current process. This is usually due to previous crashes.
【代码】【QT】Fault tolerant heap shim applied to current process. This is usually due to previous crashes.
2023-08-31 10:38:35
286
原创 [Plant Simulation] 基于长度对Transporter的控制(TargetPosition函数)
基于长度对Transporter的控制行驶一定距离的Transporter初始化TargetPosition函数循环开始小车控制策略行驶一定距离的Transporter小车从Source装货,送到S1加工,S1加工后到S2加工,S2加工完成后送到Drain卸货,往复循环初始化var tsp:objecttsp:=.MUs.PortalTransporter.create(Portal,1)tsp.targetPosition:=2waituntil tsp.targetPosition=
2021-03-26 15:13:37
660
2
原创 [Plant Simulation]使用TableFile和Method进行仓库仿真(Byref函数)
使用TableFile和Method进行仓库仿真Store配合TableFile处理仓库必要信息(Byref函数)初始化寻找空闲货位byref函数入库策略出库策略Store配合TableFile处理仓库必要信息(Byref函数) 当有一个入库任务,需要先寻找空闲的货位(也可以按照策略来) 当一个零件存储,要用一个清单记录零件名称,所存储的货位位置 当有一个出库任务,需要先寻找对应零件的位置(也可以按照策略来) 当一个零件出库,还要从仓库清单上清除该零件,以免重复查询初始化stock.de
2021-03-25 15:03:08
2022
2
原创 [Plant Simulation]通过FailCtrl模拟换刀并计算换刀时间(Controls使用及OnFail中函数)
通过FailCtrl模拟换刀并计算换刀时间Controls使用及OnFail中函数工作站用户属性工作站Controls初始化工作站入口控制策略工作站Fail策略failureIsStarting参数profileName参数StartStat函数Chart的InputChannelsControls使用及OnFail中函数工作站用户属性工作站Controls初始化var i:integerfor i:=1 to self.~.ToolUsage.YDim self.~.ToolUsage
2021-03-23 15:10:59
417
原创 [Plant Simulation]一个使用CurrIconNo的简单动画(CurrIconNo使用及executeIn函数)
一个使用CurrIconNo的简单动画CurrIconNo使用及executeIn函数工作站用户属性初始化工作站入口函数工作站IconCurrIconNo函数executeIn函数deleteMethCall函数execute函数工作站出口函数CurrIconNo使用及executeIn函数工作站用户属性初始化Station.CurrIconNo:=Station.animation_start工作站入口函数var timePerSec:timetimePerSec:=self.~.P
2021-03-16 15:43:22
333
原创 [Plant Simulation]Worker给一个Station提供不同的services(services的使用及图标的旋转)
图标的旋转修改ObjectAngle
2021-03-16 13:31:51
759
12 warehouse simulation(version tablefile).spp
2021-03-25
09 Worker works on different workplaces.spp
2021-03-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人