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

AvalonDock使用MVVM时,文档关闭不会删除DocumentsSource中的i tem

AvalonDock是一个用于创建可扩展的WPF应用程序的开源库。它提供了一个灵活的布局和管理多个文档窗口的框架。MVVM(Model-View-ViewModel)是一种软件架构模式,用于将用户界面逻辑与业务逻辑分离。

在使用AvalonDock时,文档关闭不会自动从DocumentsSource中删除item。这是因为AvalonDock的设计理念是将文档的生命周期与视图模型分离,以便更好地支持MVVM模式。文档的打开和关闭是由视图模型控制的,而不是由AvalonDock直接管理。

要实现文档关闭时从DocumentsSource中删除item,可以在视图模型中监听文档关闭的事件,并在事件处理程序中手动从DocumentsSource中移除对应的item。以下是一个示例代码:

代码语言:csharp
复制
// 在视图模型中定义DocumentsSource属性
public ObservableCollection<DocumentViewModel> DocumentsSource { get; set; }

// 在构造函数中初始化DocumentsSource
public MainViewModel()
{
    DocumentsSource = new ObservableCollection<DocumentViewModel>();
}

// 监听文档关闭事件
public void OnDocumentClosed(object sender, DocumentClosedEventArgs e)
{
    var closedDocument = e.Document.Content as DocumentViewModel;
    if (closedDocument != null)
    {
        DocumentsSource.Remove(closedDocument);
    }
}

在上述示例中,DocumentsSource是一个ObservableCollection,用于存储所有打开的文档的视图模型。当文档关闭时,通过监听文档关闭事件(例如AvalonDock的DocumentClosed事件),可以获取到关闭的文档对应的视图模型,并从DocumentsSource中移除该视图模型。

关于AvalonDock的更多信息和使用方法,可以参考腾讯云的相关产品介绍链接地址:AvalonDock产品介绍。请注意,此链接仅为示例,实际应根据实际情况选择合适的腾讯云产品。

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

相关·内容

AvalonDock基本用法

对于复杂软件系统,大量控件使用会使界面变得难以管理。AvalonDock帮我们解决了这一问题。...下载AvalonDock动态库与主题库,解压后如图所示: 在WPF项目的引用添加这些库,然后使用在xaml引入命名空间:xmlns:avalon=”http://schemas.xceed.com...下图是AvalonDock主页展示示例截图。 AvalonDock库中提供了一些基本类,熟悉这些类功能是使用AvalonDock第一步。...当一个窗格浮动AvalonDock会将其从其所在组删除,然后放置到FloatingWindows集合。当一个窗格关闭,会将其放置在Hidden集合。...至于更改AvalonDock外观样式,使用MVVM模式等高级用法,需要自己慢慢去学习了。

1.2K10

AvalonDock使用(1)-基本用法

下载地址:http://avalondock.codeplex.com/releases/view/107371 AvalonDock效果截图 AvalonDock基本类 AvalonDock...库中提供了一些基本类,熟悉这些类功能是使用AvalonDock第一步。...当一个窗格浮动AvalonDock会将其从其所在组删除,然后放置到FloatingWindows集合。当一个窗格关闭,会将其放置在Hidden集合。...LayoutDocumentPane:文档窗格类 与LayoutAnchorablePane类似,也是可停靠控件容器; 文档窗格类可以放置可停靠控件LayoutAnchorable,也可以放置文档控件...通过设置Orientation 属性,用于管理多个文档窗格浮动方向。 小结 其实AvalonDock类有着明显层次结构,就是容器嵌套。

1K10
  • WPF随笔(十)–使用AvalonDock实现可停靠式布局「建议收藏」

    大家好,又见面了,我是你们朋友全栈君。 我们每天使用许多软件都使用了可停靠式布局,可以方便打开、关闭、收起、展开、移动选项卡。...今天就来说明如何使用AvalonDock实现这种可停靠式布局。...AvalonDock安装 最新版本AvalonDock类库包含在程序包Extended.Wpf.Toolkit,属于Xceed旗下一款产品。...层级结构 结合上面的示例和官方文档说明,使用AvalonDock页面元素结构大体如下: 各个类说明如下: 名称 说明 DockingManager 停靠管理器,核心控件,负责管理浮动窗体...当一个窗格浮动AvalonDock会将其从其所在组删除,然后放置到FloatingWindows集合。当一个窗格关闭,会将其放置在Hidden集合

    3.6K30

    WPF AvalonDock拖拽布局学习整理

    大家好,又见面了,我是你们朋友全栈君。 AvalonDock提供了一个系统,允许开发人员使用类似于许多流行集成开发环境(IDE)窗口对接系统来创建可自定义布局。...AvalonDock遵循MVVM设计。Model由Xceed.Wpf.AvalonDock.Layout命名空间中包含类表示。.../ LayoutDocumentPaneGroup等),它们直接在DockingManagerXAML中使用,以描述布局组成方式。...DockingManager包含在Xceed.Wpf.AvalonDock命名空间中,它使用各种类(例如LayoutItem及其派生类)来执行ViewModel角色,准备视图使用模型。...AvalonDock包含基本内容类是LayoutAnchorable和LayoutDocument ; 这两个类都派生自LayoutContent类,它确定元素是否可以关闭,浮动(被拖动并转换为浮动窗口

    2.7K30

    avalondock 翻译网站文章(一)「建议收藏」

    AvalonDock 2.0允许创建一个非常类似于VSGUI接口提供给WPF,已经发展到这一点所以它最适合于具有文档和工具项目。...在这个教程里我要展示给你是怎么开始使用AVALonDock,以下信息是关于2.0版本和早点可用版本。...上面的文件内容被放置在一个ResizingPanel (水平orienteted )在刚才提到太DockablePane对象之间中心区域。文档窗格无法移动。...因此,如果一个LayoutAnchorablePane包含在LayoutPanel其中存在,它使用一个固定大小LayoutAnchorablePane和星形长度为LayoutDocumentPane...在本指南第2部分,我们将看到如何保存布局,附加活动,如DocumentClose /关闭或ActiveContent改变。

    98730

    POJ 1176 Party Lamps&& USACO 2.2 派对灯(搜索)

    输入输出格式 输入格式: 不会有灯会在输入中出现两次。 第一行: N。 第二行: C最后显示数值。 第三行: 最后亮着灯,用一个空格分开,以-1为结束。...第四行: 最后关着灯,用一个空格分开,以-1为结束。 输出格式: 每一行是所有灯可能最后状态(没有重复)。每一行有N个字符,第1个字符表示1号灯,最后一个字符表示N号灯。0表示关闭,1表示亮着。...输入输出样例 输入样例#1: 10 1 -1 7 -1 输出样例#1: 0000000000 0101010101 0110110110 说明 在这个样例,有三种可能状态: 所有灯都关着...比如在这个题目中其实四位数足以表示所有情况,但是我为了保险还使用了6位,但是这并没有太大区别,考虑四位数,当对四位数变换超过6次必然出现重复结果,虽然不知道最少变换几次,但是6次已经够少了。...[7]; op1(a,tem); dfs(tem,w+1); op2(a,tem); dfs(tem,w+1); op3(

    40720

    数据结构·顺序表实现通讯录

    引言: 有了前面顺序表基础,我们可以尝试利用顺序表实现通讯录,日常使用,通讯录可以实现功能有增加联系人,删除联系人,查找联系人,修改联系人,查看联系人等,我们通过本章学习实现以上五种功能(默认通讯录包含元素有...名称 性别 年龄 电话号码 地址 ) 1 基本格式 通讯录算是一个小程序了,人们在使用之前都习惯于有菜单,所以我们使用do-while循环,加上switch语句,可以打印菜单,并且用户可以多次选择执行操作...插入数据时候,我们这里为了方便起见,就用尾部插入,删除我们使用是指定位置删除,因为之后删除联系人需要系统需要知道联系人位置,所以采用是指定位置删除: void ConCheckCapacity...6 删除联系人 在执行删除联系人之前应该先遍历整个通讯录看有没有这个联系人,如果没有,也就不存在删除说法,所以下一个实现函数是查找联系人,联系人有多种数据,其中重叠可能性最小是姓名,即我们可以使用姓名来查找联系人...,因为查找联系人是为了之后删除,修改联系人做准备,查找联系人返回值可以有正负,i -1,i就表示找到了,存在这个联系人,下标为i,-1就表示没有找到,不存在这个联系人: int FindByname

    5910

    10天从入门到精通Vue(一)-vue基本概念和基础语法(v-text、v-bind、v-on、v-model等)

    文章目录 什么是Vue.js 为什么要学习流行框架vue 框架和库区别 Node(后端) MVC 与 前端 MVVM 之间区别 Vue.js 基本代码 Vue之 基本代码结构和插值表达式...Node(后端) MVC 与 前端 MVVM 之间区别 MVC 是后端分层开发概念; MVVM是前端视图层概念,主要关注于 视图层分离,也就是说:MVVM把前端视图层,分为了 三部分 Model...这是第 {{i}} 个P标签 2.2.0+ 版本里,当在组件中使用 v-for ,key 现在是必须。...-- v-show 特点: 每次不会重新进行DOM删除和创建操作,只是切换了元素 display:none 样式 --> <!...= -1; }); } 相关文章 vue.js 1.x 文档 vue.js 2.x 文档 vue.js 3.x 文档 js 里面的键盘事件对应键码 Vue.js双向绑定实现原理

    1.4K31

    前端面试哪些是必须要掌握

    ,SessionStorage 主要用于临时保存同一窗口(或标签页)数据,刷新页面不会删除关闭窗口或标签页之后将会删除这些数据。...(3)当一个进程关闭之后,操作系统会回收进程所占用内存, 当一个进程退出,操作系统会回收该进程所申请所有资源;即使其中任意线程因为操作不当导致内存泄漏,当进程退出,这些内存也会被正确回收。...console.log(j) }, j * 1000) })(i)}在上述代码,首先使用了立即执行函数将 i 传入函数内部,这个时候值就被固定在了参数 j 上面不会改变,当下次执行 timer...一旦我们关闭 Tab 页面,内存缓存也就被释放了。...并且即使在跨站点情况下,相同地址资源一旦被硬盘缓存下来,就不会再次去请求数据。Disk Cache: Push Cache 是 HTTP/2 内容,当以上三种缓存都没有命中,它才会被使用

    70420

    Vue 01.基础

    Vue与MVVM模式 后端 MVC 与 前端 MVVM 之间区别 MVC 是后端分层开发概念; MVVM是前端视图层概念,主要关注于 视图层分离,也就是说:MVVM把前端视图层,...开始 这是第 {{i}} 个P标签 2.2.0+ 版本里,当在组件中使用 v-for ,key 现在是必须。...每次都会重新删除或创建元素 有较高切换性能消耗,如果元素可能永远不会显示出来,推荐用v-if v-show 每次不会重新进行DOM删除和创建操作,只是切换了元素 display:none 样式...【计算属性】属性,计算属性本质就是一个方法,只不过在使用这些计算属性,是把它们名称直接当作属性来使用;并不会把计算属性当作方法去调用; // 注意1:在引用计算属性,不要加()去调用...,方便下次直接使用;如果计算属性方法任何数据都没有发生过变化,则不会重新对计算属性求值;即不会重新执行这个方法 'fullname': function () { console.log

    1.6K40

    C++课程设计详解-12306模拟实现

    在在个系统中一定会有时间,应写一个时间类,时间类包括年月日时分,get/set函数,通过两个时间类计算停靠时间,这里会发现,任何一辆高铁夜间都是不行车,所以不会出现跨天可能,其实也不会出现超过一小...,删除旧站点。...增删查改车次: 查也可以继承,增可以写创建函数,删写删除函数,在列车数据vector遍历查找要删除车次,进行实删。...课程设计又回顾了很久之前用过字符串流,很长时间没有使用确实略显生疏,但是在摸索下还是上手很快,其他也使用很多重载运算符,尤其是对于输入输出流重载,这对于文件读写来说甚是方便。...; //在某站出发到达家间; pair leave; string station; //作为数据类指向vector站台; int piao[31];

    70630

    “终于懂了“系列:Jetpack AAC完整解析(四)MVVM - Android架构探索!

    所以,这篇尽量讲清楚 开发架构模式和MVVM本质,使得有一种 “哦,原来如此” 豁然开朗。 注意,本篇完全 不会提 DataBinding、双向绑定,文末会解释为啥不提。 一、开发架构 是什么?...3.1 Jetpack MVVM 理解 Jetpack MVVMMVVM 模式在 Android 开发一个具体实现,是 Android Google 官方提供并推荐 MVVM实现方式。...ViewModel层 用于持有和UI元素相关数据,以保证这些数据在屏幕旋转不会丢失,并且还要提供接口给View层调用以及和仓库层进行通信。...应用其他组件可以使用此存储器监控对象更改,而无需在它们之间创建明确且严格依赖路径。...删除定义IView等接口,Activity/Fragment 获取ViewModel实例,调用其方法获取数据。 Activity/Fragment 观察需要 LivaData 然后刷新UI。

    2K20

    Ubuntu 文件同步工具 rsync

    -R, --relative 使用相对路径信息。 -b, --backup 创建备份,也就是对于目的已经存在有同样文件名,将老文件重新命名为~filename。...--existing 仅仅更新那些已经存在于DST文件,而不备份那些新创建文件。 --delete 删除那些DSTSRC没有的文件。...-I, --ignore-times 不跳过那些有同样时间和长度文件。 --size-only 当决定是否要备份文件,仅仅察看文件大小而不考虑文件时间。...--modify-window=NUM 决定文件是否时间相同时使用时间戳窗口,默认为0。 -T --temp-dir=DIR 在DIR创建临时文件。...--password-file=FILE 从FILE得到密码。 --bwlimit=KBPS 限制I/O带宽,KBytes per second。 -h, --help 显示帮助信息。

    2.9K10
    领券