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

WPF中的Catel问题,InterestedIn ViewModel重新加载

在WPF中,Catel是一个开源的MVVM框架,用于简化WPF应用程序的开发过程。它提供了一套强大的工具和模式,帮助开发人员更轻松地构建可测试、可扩展和可维护的应用程序。

在Catel中,ViewModel是应用程序的逻辑和数据处理层。当ViewModel重新加载时,可能会出现一些问题,其中一个常见的问题是InterestedIn属性的使用。

InterestedIn属性是Catel框架中的一个特性,用于指定ViewModel对其他ViewModel的感兴趣。当被感兴趣的ViewModel发生变化时,InterestedIn属性会自动更新。

然而,在ViewModel重新加载时,InterestedIn属性可能会失效。这是因为重新加载会导致ViewModel的实例发生变化,而InterestedIn属性是基于实例的。因此,重新加载后,原来的InterestedIn属性将不再有效。

为了解决这个问题,可以在ViewModel重新加载之前,手动取消对其他ViewModel的感兴趣,并在重新加载后重新订阅感兴趣的ViewModel。

以下是一个示例代码:

代码语言:txt
复制
public class MyViewModel : ViewModelBase
{
    private MyOtherViewModel _interestedViewModel;

    public MyViewModel()
    {
        this.PropertyChanged += MyViewModel_PropertyChanged;
    }

    public MyOtherViewModel InterestedViewModel
    {
        get { return _interestedViewModel; }
        set
        {
            if (_interestedViewModel != value)
            {
                if (_interestedViewModel != null)
                {
                    _interestedViewModel.PropertyChanged -= InterestedViewModel_PropertyChanged;
                }

                _interestedViewModel = value;

                if (_interestedViewModel != null)
                {
                    _interestedViewModel.PropertyChanged += InterestedViewModel_PropertyChanged;
                }

                RaisePropertyChanged(nameof(InterestedViewModel));
            }
        }
    }

    private void MyViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        if (e.PropertyName == nameof(InterestedViewModel))
        {
            // 取消对原来的InterestedViewModel的感兴趣
            if (_interestedViewModel != null)
            {
                _interestedViewModel.PropertyChanged -= InterestedViewModel_PropertyChanged;
            }

            // 重新订阅感兴趣的ViewModel
            if (InterestedViewModel != null)
            {
                InterestedViewModel.PropertyChanged += InterestedViewModel_PropertyChanged;
            }
        }
    }

    private void InterestedViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        // 处理感兴趣的ViewModel的属性变化
    }
}

在上述示例中,当MyViewModel的InterestedViewModel属性发生变化时,会取消对原来的InterestedViewModel的感兴趣,并重新订阅新的InterestedViewModel。

这样,在ViewModel重新加载时,可以保持InterestedIn属性的有效性,并正确处理感兴趣的ViewModel的属性变化。

对于Catel框架的更多信息和使用方法,可以参考腾讯云的Catel产品介绍页面:Catel产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WPF 常用框架整理

Caliburn Micro:支持视图模型先行(ViewModel-First)和视图先行(View-First)两种开发方式,通过co-routine支持异步编程。...Simple MVVM Toolkit:提供VS项目和项模板,依赖注入,支持深拷贝以及模型和视图模型之间属性关联。 Catel:包含项目和项模板,用户控件和企业类库。...支持动态视图模型注入,视图模型延迟加载和验证。还支持WP7专用视图模型服务。...闭源框架主要有: Intersoft ClientUI:付费,只支持WPF和Silverlight,但是,除了MVVM框架,它还提供其它一些特性。 Vidyano:免费但不开源。...其中最常用也就是:PRISM、MVVM Light和Caliburn Micro 以下是Caliburn Micro和PRISM框架搭建方法 C#WPF MVVM框架Caliburn.Micro从零搭建

2.2K10

WPF 图片显示保留字符问题

WPF显示一张图片,本是一件再简单不过事情。一张图片,一行XAML代码即可。...这就是今天想说问题,某些特殊符号(或叫保留字符)对图片显示影响。 首先简单回顾一下WPF显示图片常用两种图片资源存储方式:资源 和 内容。资源会被编译到exe或dll,使用优势是速度,简便。...在WPF,不管是资源还是内容方式,都是通过URI (uniform resource identifier)来标识和加载文件。...大家可以在这里对URI构造和解析原理做更多了解:MSDN WPF Pack URI。...虽然我们自己只写了一行XAML代码去实现图片显示,但是WPFPack URI做了资源分类,解析和文件加载等。

1K110

解决Excel下挪动加载项(.xlam)后,重新加载xlam还是每次启动Excel都报错问题

问题描述:Excel加载了一个插件,但是因为目录调整自己挪动了位置,即使重新加载该插件,每次重启Excel还是报之前找不到插件问题,虽然能使用,但是每次都报错很烦。...问题解决办法:虽然每次提醒报错后,可以删除不存在加载项,但是重启Excel后还存在,最后想了下可能是注册表这里没有清除导致,测试果然如此!...解决步骤: 打开注册表编辑器: 搜索自己安装插件名: 找到后发现Excel安装插件名、路径都在如下位置: ……SOFTWARE\Microsoft\Office\16.0\Excel\AddInLoadTimes...下面 重复报错,发现AddInLoadTimes下面的xlam插件路径还是原来旧,果断删除该注册表项,再重新添加问题即可解决!

2.1K20

【翻译】WPF 附加行为介绍 Introduction to Attached Behaviors in WPF

本文解释了什么是附加行为,以及您如何在 WPF 应用程序实现它们。本文读者需要稍微熟悉 WPF、XAML、附加属性、以及 MVVM 模式。...现在问题就变成了,当 ViewModel 设置一个 TreeViewItem 为被选中时谁负责将其带到视野。...我们也不想把代码放在每个放置了受 ViewModel 约束 TreeView 后置代码,因为这将重新引入一些我们起初通过使用 ViewModel 避免了问题。...我们可以创建一个 TreeViewItem 子类,该类拥有当被选中时将自己带到视野内建支持,但是,在 WPF 世界,这肯定就是杀鸡用牛刀了。...在那篇文章,Demo 程序以一种复杂方式使用附加行为,但在这篇文章,我们会让其简单。背景和理论足够了,让我们看看怎样创建一个附加行为来解决我们朋友 Pascal 发布问题吧。

1.5K10

win10 uwp 轻量级 MVVM 框架入门 2.1.5.3199

,实际上在使用,用 WPF 或 UWP 是差不多。...只要存在 UWP 和 WPF 不相同库,我就把这写封装在不同库。 使用 WPF 项目只需要安装 lindexi.wpf.Framework 这个库。...很多程序在启动是否都需要读取配置,这时就需要先显示一个初始页面,在这个页面显示过程,加载很多数据 在 Main 构造函数使用 LoadAsync 方法,这个方法先跳转到 SplashPage 然后再调用...需要 INavigatableViewModel 和 INavigatablePage 原因是,我这个还有在 WPF 使用,大家都知道 WPF Frame 跳转和 UWP 相同,所以需要传入不同类...如果写在页面有一个问题是如何把其他页面跳转信息发送到 ViewModel ,这个框架使用是在外面创建。 在 UWP 页面参数是在 OnNavigatedTo 函数拿到。

1.3K20

win10 uwp 依赖属性

本文告诉大家如何使用依赖属性,包括在 UWP 和 WPF 如何使用。 本文不会告诉大家依赖属性好处,只是简单告诉大家如何使用。...UWP 什么时候可以获取继承依赖属性 依赖属性一般是不在构造函数写获取继承属性值,因为一般这时拿到值都是没有继承,请看下面的代码 创建一个用户控件 LuenqxuhkRrjbzcf ,在他构造函数和加载完成事件添加获得...但是可以在加载完成函数拿到 ? 那么是在什么时候才可以拿到依赖属性值? 依赖属性需要在加逻辑树才可以拿到值,所以在加入逻辑树之后,构造函数是类创建,所以这时不能拿依赖属性值。...那么问题2,如果我 ViewModel 绑定属性是私有的,那么把绑定写在ViewModel 里,那么是否可以访问,可以看到,如果写在ViewModel Binding ,那么这个 Binding...WPF 获得依赖属性值更新 如果需要获得 G Padding 值更改,WPF 获得依赖属性 值更改可以使用下面代码 DependencyPropertyDescriptor.FromProperty

81220

推荐一个IT老鸟肝了2月有余免费开源WPF企业级开发框架

JHRS开发框架之WPF数据验证 JHRS开发框架之ViewModel相互传参和弹框回传参解决办法 JHRS开发框架之踩坑记(终章) WPF管理系统开发框架设计图 在正式开始WPF开发框架搭建之前,...先来说说我期望开发框架要实现哪些功能。 在开始搭建之前呢,还是晾一下最终架构图吧。 WPF基于WEB API开发管理系统框架 上图就是折腾出来一个框架,图不美观的话,大伙也就凑合着看吧。...在搭建这个框架时,是基于最新 【 .net 5】用技术版本是比较新,演示代码wpf也是使用 .net 5。...在子模块,目录组织原则如下。...OutpatientSystemModule 命名:模块名称+Module 在每一个子系统,最外层一个模块类,名称规则为:【模块名称+Module】,编写这个类是为了使用Prism加载这个模块。

2.2K30

WPF 绑定命令在 MVVM CanExecute 和 Execute 在按钮点击都没触发可能原因

WPF 推荐使用 MVVM 绑定命令,但是绑定命令会存在很多坑,其中一个就是焦点问题。...如果在元素一次 Dispatcher 过程重新拿到焦点,那么按钮命令将不会被触发 说起来复杂,因为在项目的代码是很复杂很难直接看到这个问题,所以我建议创建一个新 WPF 项目,不要引用任何小伙伴框架...); DataContext = ViewModel; } public ViewModel ViewModel { get; } = new...ViewModel(); 如何绑定 ViewModel 请看 win10 uwp DataContext 在界面放一个文本和一个按钮,文本可以在失去焦点时候重新拿到焦点 <StackPanel...、命令没有绑对,还有可能是在过程出现焦点问题 另外不一定是用户直接调用 Focus 其他 WPF 控件间接修改 源代码放在 github

1.6K20

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

Static Resource - StaticResource 值在加载时确定Dynamic Resource - 在运行时更改属性值情况下使用。7.WPF控件分类?...WinForms 通常用于开发业务应用程序,而 WPF 通常用于创建更多基于最终用户软件、应用程序等。 19.如何理解MVVM View 和 ViewModel?...ViewModel 是一个非可视类。 MVVM 设计模式不派生自任何基于 WPF 类。 ViewModel 不直接知道View。...29.WPF样式和资源有什么区别?资源用于针对多种类型控件属性,而样式一次只能为一种类型控件定义属性。 我们还可以将不同样式定义为一种公共资源一部分。 这是一个开放式问题。...依赖属性优点如下:减少内存占用当 UI 控件 90% 以上属性通常保持其初始值时,为每个属性存储一个字段是一种巨大消耗。 依赖属性通过仅在实例存储修改属性来解决这些问题

42622

WPF开源项目:WPF-ControlBase

4.1 目的 在使用Asp.net Core时,深感MVC框架作为页面跳转数据处理方便,但WPF似乎没有现成MVC框架,由此自定义开发一套MVC框架,在使用过程也体会到框架优势,下面简要介绍一下这套基于...MVVMMVC框架 4.2 项目结构 主要有三部分组成:Controller、View、ViewModel 其中View和ViewModel就是传统WPFMVVM模式 不同地方在于页面的跳转应用到了...,加载项目结构View、ViewModel去生成IActionResult返回给主页面进行页面跳转,代码如下: public abstract class ControllerBase : IController...基类NotifyPropertyChanged去找到对应ViewModel,绑定到View 将View和ViewModel封装到IActionResult返回给主页面进行加载 其中Controller...*总结:**使用方式为绑定数据源到TreeListView控件 5.5.3 其他常用控件 a 对话框 采用内置对话框,不是应用窗口,只是覆盖层,可以避免窗口对话框引起一些问题 b 对话窗口自定义对话窗口

3.4K30

WPF开源项目:WPF-ControlBase

4.1 目的 在使用Asp.net Core时,深感MVC框架作为页面跳转数据处理方便,但WPF似乎没有现成MVC框架,由此自定义开发一套MVC框架,在使用过程也体会到框架优势,下面简要介绍一下这套基于...MVVMMVC框架 4.2 项目结构 主要有三部分组成:Controller、View、ViewModel 其中View和ViewModel就是传统WPFMVVM模式 不同地方在于页面的跳转应用到了...,加载项目结构View、ViewModel去生成IActionResult返回给主页面进行页面跳转,代码如下: public abstract class ControllerBase : IController...基类NotifyPropertyChanged去找到对应ViewModel,绑定到View 将View和ViewModel封装到IActionResult返回给主页面进行加载 其中Controller...*总结:**使用方式为绑定数据源到TreeListView控件 5.5.3 其他常用控件 a 对话框 采用内置对话框,不是应用窗口,只是覆盖层,可以避免窗口对话框引起一些问题 b 对话窗口自定义对话窗口

3.5K10

Tomcat 应用并行流带来加载问题

但是,作者发现在 Tomcat 容器中使用并行流会出现动态加载类失败情况,通过对比 Tomcat 多个版本源码,结合并行流和 JVM 类加载机制原理,成功定位到问题来源。...,发现单独从JDK自身难以发现问题,因此将分析转移到Tomcat。...它工作过程是:如果一个类加载器收到了类加载请求,它首先不会自己去尝试加载这个类,而是把整个请求委派给父类加载器去完成,每一个层次加载器都是如此,因此所有的加载请求最终都应该传送到顶层启动类加载...contextClassLoader,进而避免了Tomcat应用由并行流带来加载器内存泄露。...总之,我们需要避免在Tomcat应用通过并行流进行自定义类或者第三方类动态加载

1.4K01

MVVM模式和在WPF实现(一)MVVM模式简介

ViewModel 上面说过Model抽象,那么ViewModel就是对View抽象。显示数据对应着ViewModeProperty,执行命令对应着ViewModelCommand。...0x02 WPFMVVM解耦方式 在WPFMVVM模式,View和ViewModel之间数据和命令关联都是通过绑定实现,绑定后View和ViewModel并不产生直接依赖。...ViewModelCommand脱离View就更简单了,因为Command在执行操作过程操作数据时,根本不需要操作View数据,只需要操作ViewModelProperty就可以了,Property...0x3 MVVM框架需要解决问题 从图中可以看出如果要实现一套MVVM框架,需要解决最基本问题就是数据绑定和命令绑定。此外由于UI中会产生大量事件,因此还需要将事件绑定到MVVM命令上。...后面的文章将依次尝试解决这些问题。最后还是要说一下任何设计模式都是参考,都有使用场景,切忌生搬硬套。实际开发应根据项目特点采取适配性更强模式。

1.5K20

WPF自学入门(十)WPF MVVM简单介绍

前面文章,我们已经知道,WPF技术主要特点是数据驱动UI,所以在使用WPF技术开发过程是以数据为核心WPF提供了数据绑定机制,当数据发生变化时,WPF会自动发出通知去更新UI。   ...在WPF开发,经典编程模式是MVVM,是为WPF量身定做模式,该模式充分利用了WPF数据绑定机制,最大限度地降低了Xmal文件和CS文件耦合度,也就是UI显示和逻辑代码耦合度,如需要更换界面时...在实际业务场景我们经常会遇到客户对界面提出建议要求修改,使用MVVM模式开发,当设计界面不满足客户时,我们仅仅只需要对View作修改,不会影响到ViewModel功能代码,减少了犯错机会。...随着功能地增加,系统越来越复杂,相应地程序中会增加View和ViewModel文件,将复杂界面分离成局部View,局部View对应局部ViewModel,功能点散落在各个ViewModel,每个...此时视图不会收到任何关于属性改变通知。要解决这个问题我们必须实现名称为INotifyPropertyChanged接口。

2.3K20

WPF 轻量级 MVVM 框架入门 2.1.2 安装项目要求创建主页面找到 ViewModel通过附加属性找到 ViewModel跳转页面跳转命令自定义命令

UWP 封装,实际上在使用,用 WPF 或 UWP 是差不多。...找到 ViewModel 现在在创建 ViewModel 推荐在 App.xaml 作为资源,因为 WPF 页面跳转没有和 UWP 一样可以获得参数,需要通过自己方式拿到。...通过附加属性找到 ViewModel 第二个方法是通过附加属性方法找到 ViewModel ,因为在 WPF 是可以定义可继承附加属性,而在 UWP 是不可以自己定义可以继承附加属性。...在 WPF 可以通过定义附加属性方式让页面拿到上一级 ViewModel ,那么两个方法不同在哪?如果定义为资源,那么使用比较简单。...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后作品务必以相同许可发布。

1.2K20

WPF 双向绑定到非公开 set 方法属性在 NET 45 和 NET Core 行为不同

本文记录 WPF 在 .NET Framework 4.5 和 .NET Core 3.0 或更高版本对使用 Binding 下 TwoWay 双向绑定模式绑定到非公开 set 属性上行为变更 在...set 方法一样,可以成功写入 但是在 .NET Core 3.0 开始,此绑定将会提示 XamlParseException 而抛出异常 如以下 ViewModel 代码,包含了一个 Name 属性...在 .NET Core 3.0 更新里,也提到了这个坑,参阅 August Update for WPF on .NET Core 3.0 · Issue #1731 · dotnet/wpf问题我也报告给官方...我认为,如果 ViewModel 设置了属性 set 为私有,那也就是从设计上不要让其他逻辑进行设置,自然在 XAML 里对非公开设置属性进行写入也是非预期,抛出异常符合设计 本文所有代码放在github...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:https://blog.lindexi.com),不得用于商业目的,基于本文修改后作品务必以相同许可发布。

1.1K20

Prism 8.0 入门(下):Prism.Wpf 和 Prism.Unity

以前做 WPF 和 Silverlight/Xamarin 项目的时候,我有时会把 ViewModel 和 View 放在不同项目,ViewModel 使用 可移植类库项目,这样 ViewModel...我还会假装下个月 UWP 就要崛起了,我手头 WPF 项目中 ViewModel 要做到平台无关,方便我下个月把项目移植到 UWP 项目中。...为了解决这个问题,Prism 提供了 ContainerProvider 这个工具,通过设置 Type 或 Name 从 Container 解析请求类型,它用法如下: <TextBlock...但在 MVVM 模式,开发者要假装自己不知道要调用 View,甚至不知道要调用 ViewModel。...至此就完成了弹出对话框并获取结果整个流程。 自定义 Window 样式在 WPF 程序很流行,DialogService 也支持自定义 Window 样式。

5.2K20
领券