App.Current.Services.GetService<UserView>()无限循环

server/2025/2/1 10:52:53/

代码无线循环

public partial class UserView : UserControl{public UserView(){InitializeComponent();InitData();}private void InitData(){DataContext = App.Current.Services.GetService<UserView>();}}
} 
DataContext = App.Current.Services.GetService<UserView>();

由于 UserView 类本身被注册为服务调用 GetService<UserView>() 将尝试创建一个新的 UserView 实例。新实例的构造函数将再次被调用,进而再次调用 InitData(),这又会尝试获取一个新的 UserView 实例,从而形成一个无限循环,最终导致堆栈溢出或程序崩溃。

当您调用 App.Current.Services.GetService<UserView>() 时,如果 UserView 类本身被注册为服务(例如通过 services.AddSingleton<UserView>(); 或其他生命周期管理方式),那么 GetService<UserView>() 将尝试创建一个新的 UserView 实例,除非该服务已经存在一个实例。

然而,在默认情况下,WPF 控件如 UserControl(包括 UserView)通常不会直接作为服务注册到依赖注入容器中。如果您没有明确地将 UserView 注册为服务那么调用 GetService<UserView>() 应该返回 null而不是创建新的实例。但如果您确实以某种方式注册了 UserView,那么就会发生您描述的情况:每次调用 GetService<UserView>() 都会尝试创建一个新的实例,导致无限循环。

解决方案

要解决这个问题,应该确保 DataContext 设置为合适的 ViewModel 而不是试图将视图自身设置为其数据上下文。通常的做法是使用 MVVM 模式,其中视图 (UserView) 绑定到一个具体的 ViewModel (UserViewModel)。修改为

DataContext = App.Current.Services.GetService<UserViewModel>();

http://www.ppmy.cn/server/164051.html

相关文章

信号模块--simulink操作

位置simulink/sourses 常用的模块 功能&#xff1a;常数模块&#xff0c;提供一个常数 数据设置可以是一维或多维 一维数据设置 多维数据设置&#xff08;例三维数据设置&#xff09; 方波脉冲模块 模块用于按固定间隔生成方波脉冲信号 振幅就是方波的幅度&#xff0c;0到…

wordpress外贸独立站常用询盘软件

LiveChat LiveChat是一家提供实时聊天软件的公司&#xff0c;帮助企业通过其平台与客户进行即时通讯&#xff0c;提高客户满意度和忠诚度。他们的产品允许企业在网站、应用程序或电子邮件等多个渠道与客户互动&#xff0c;从而提升客户体验并促进销售增长。 LiveChat的软件特…

CentOS/Linux Python 2.7 离线安装 Requests 库解决离线安装问题。

root@mwcollector1 externalscripts]# cat /etc/os-release NAME=“Kylin Linux Advanced Server” VERSION=“V10 (Sword)” ID=“kylin” VERSION_ID=“V10” PRETTY_NAME=“Kylin Linux Advanced Server V10 (Sword)” ANSI_COLOR=“0;31” 这是我系统的版本,由于是公司内网…

vue3表格数据分2个表格序号连续展示

一、el-table表格在弹窗里面分两个表格展示。 假设我们有一个数组 tableData&#xff0c;我们希望在第一个表格中展示前半部分的数据&#xff0c;第二个表格中展示后半部分的数据。 <template><el-button type"primary" click"dialogVisible true&q…

【matlab】绘图 离散数据--->连续函数

matlab绘图练习 离散数据及离散函数对离散区间进行细划分 达到连续效果画plot(y)图 与 复数的应用 离散数据及离散函数 例1 x1[1 2 4 6 7 8 10 11 12 14 16 17 18 20] y1[1 2 4 6 7 8 10 10 8 7 6 4 2 1] figure(1); plot(x1,y1,o,MarkerSize,15); x21:20; y2log(x2); figure…

Day50:字典的合并

在 Python 中&#xff0c;字典是一个可变的数据类型&#xff0c;经常需要将多个字典合并成一个字典。合并字典的方式有多种&#xff0c;今天我们将学习几种常见的方法。 1. 使用 update() 方法合并字典 update() 方法可以用来将一个字典中的键值对添加到另一个字典中。如果目…

图像处理之图像灰度化

目录 1 图像灰度化简介 2 图像灰度化处理方法 2.1 均值灰度化 2.2 经典灰度化 2.3 Photoshop灰度化 2.4 C语言代码实现 3 演示Demo 3.1 开发环境 3.2 功能介绍 3.3 下载地址 参考 1 图像灰度化简介 对于24位的RGB图像而言&#xff0c;每个像素用3字节表示&#xff0…

宇宙大爆炸是什么意思

根据宇宙大爆炸学说&#xff0c;宇宙间的一切都在彼此远离&#xff0c;而且距离越远&#xff0c;远离的速度越快。我们只能在地球上观察这种现象&#xff0c;而我们观察到的速度符合如下公式&#xff0c;其中 为哈勃常数&#xff0c; 为距离&#xff0c; 为速度&#xff08;…