【MVVM Dev】PART_Editor的使用

一、前言

      在日常的界面开发中,我们大多使用MVVM模式进行开发。通常情况下,一个PropertyGridControl或者DataGrid的ItemsSource设置好,

然后每一列绑定好某一条ItemsSource中的某一个字段就可以跑起来了。

但是也有另一种情况:

假设一个界面Temp.xaml,它的ViewModel为TempViewModel.cs;

有一个PropertyGridControl的ItemsSource以ObservableCollection<Model>绑定;

PropertyGridControl中的一个PropertyDefinition要重写Template,它所绑定的信息并不只有Model中的某个字段,

还可能包括Model中的若干个字段,甚至TempViewModel中的一些其它信息,这个时候该如何操作?

二、实例

Temp.xaml:

 <services:DockablePane.Resources>
        <ResourceDictionary>
             <DataTemplate x:Key="EditTemplate">
                <special:SpEdit x:Name="PART_Editor"/>  //这里是关键!!!!!!!!!!!!!!!
            </DataTemplate>
        </ResourceDictionary>
 </services:DockablePane.Resources>

<dxprg:PropertyGridControl
                Margin="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
                SelectedObjects="{Binding Infos}" ShowProperties="WithPropertyDefinitions"
                ShowDescriptionIn="ToolTipAndPanel" ShowCategories="True" ExpandCategoriesWhenSelectedObjectChanged="True"
                ShowMenuButtonInRows="False" ShowToolPanel="False" ShowSearchBox="False" SortMode="Definitions">

 <dxprg:PropertyGridControl.PropertyDefinitions>
                        <!--通用-->
                        <dxprg:PropertyDefinition IsReadOnly="True" Path="Code"/>
                        <dxprg:PropertyDefinition IsReadOnly="True" Path="AProperty"/>
                        <dxprg:PropertyDefinition Path="BProperty"/>
                        <dxprg:PropertyDefinition Path="CProperty"/>
                        <dxprg:PropertyDefinition Path="DProperty"/>
                        <dxprg:PropertyDefinition Path="EProperty"  ContentTemplate="{StaticResource EditTemplate}"/>
 </dxprg:PropertyGridControl.PropertyDefinitions>
</dxprg:PropertyGridControl>

在这里,我们重写的DataTemplate中的窗体名称为:PART_Editor

这个名字特别重要,不能改其它的。

这样我们就可以在SpEdit这个窗体中调用TempViewModel的全部信息,因为这个时候TempViewModel已经赋值给了SpEdit的DataContext的某个属性上,

可能的情况是这样的:

SpEdit.xaml.cs:

var source = this.DataContext as RowData;
if (source != null)
     _sourceData = (source.Definition.DataContext) as VM;

这样,我们就把Temp.xaml的ViewModel传给了SpEdit的_sourceData。

三、小结

       本文主要描述了如何在重写界面中获取源UI中的ViewModel信息。PART_Editor是一个非常实用的隐藏方法。

时间: 2024-10-12 19:12:21

【MVVM Dev】PART_Editor的使用的相关文章

【MVVM DEV】DataColumn中的TextBox与ComboBox的并存

一.前言       在WPF编程中,有时候我们使用DataGrid会需要在一个DataColumn中既有TextBox,也要有ComboBox或者TextBlock等其他数据显示样式. 这个时候我们就需要DataGridTemplateColumn去自定义我们的Column样式,通过数据类型去判断该信息是以TextBox显示还是以ComboBox来显示. PS:初入WPF-MVVM模式编程的童鞋可以先了解一下what is MVVM 二.从数据库出发       所谓兵马未到,粮草先行.数据库

【MVVM Dev】ComboBox嵌入CheckBox的显示问题

一.前言 在ComboBox中嵌入若干个CheckBox时,当我们勾选一些CheckBox,ComboBox会显示相应的勾选项. 例如:CheckBox项有A,B,C   那么勾选这三项,ComboBox会显示A,B,C 但有时候我们会发现,点击CheckBox时,ComboBox会出现对象的名称,而不是我们想要的text 例如:CheckBox有三项A,B,C 它们的类型都是XModel类型,Text分别为A,B,C. 有时候ComboBox会显示成"XModel" 为了解决这个问题

Saving Grid(Dev Express) Layout with MVVM(code from DevExpress support)

<Window x:Class="WPFGridTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xam

对于 MVVM 我想说:自已的事情自已做,控制器就简化了!

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 先来几个彩蛋: http://numbbbbb.gitbooks.io/-the-swift-programming-language-/ htt

WPF仿Word头部格式,涉及DEV RibbonControl,NarvbarControl,ContentPresenter,Navigation

时隔1个月,2015/06/17走进新的环境. 最近一个星期在学习仿Word菜单栏的WPF实现方式,废话不多说,先看一下效果. 打开界面后,默认选中[市场A],A对应的菜篮栏入上图, 选择[市场B]后讲改变菜单栏,和B相应的界面. 要实现上述的功能,要怎么解决? 实际上,每个界面都可以看成有三部分组成,顶部的DEV.RibbonControl,左侧的DEV.NavbarControl,和中间显示主要界面C部分. NavBarControl中包含多个NavBarItem,当切换NavBarItem

我所知道的MVVM框架(转 司徒大大 )

RubyLouvre commented on 6 Sep 2014 avalon http://avalonjs.github.io/ (使用Object.defineProperties. VBScript. Object.observe,纯事件驱动,兼容IE6,DOM的兼容性处理可与jQuery媲美,体积少) 早期的四大MVVM框架,都有大公司引衔 https://angularjs.org/ (google出品,思想来自flex,IoC, 脏检测,自定义标签,受限于绑定数量,一般不能超过

【MVVM 原生】原生MVVM的使用

一.前言       前些天需要完成一个任务,该任务属于公司的一些核心代码,为了避免不必要的麻烦,任务要求不能使用第三方的MVVM框架,必须用原生的. 平时习惯了Dev与MVVMLight,遇上原生的说实话还真不会,于是写下来当做备忘录.  (界面老司机可以直接不看了) 二.代码范例       View的部分就直接略过了,看Model部分: public class Model : INotifyPropertyChanged { public string Isbn { get; set;

AvalonJS+MVVM实战部分源码

轻量级前端MVVM框架avalon,它兼容到 IE6 (其他MVVM框架,KnockoutJS(IE6), AngularJS(IE9), EmberJS(IE8), WinJS(IE9) ),它可以更高效地运行于IE10等新版本浏览器中.代码量少,方便格式化输出. AvalonJS的使用很方便,类似基础标签绑定值,前端代码非常简洁,如果你有一定的JS基础,上手都是很快的.大家下来可以了解一下. 不闲聊,直接看部分代码示例: 1 <script type="text/javascript&

MVC,MVP 和 MVVM 的图示 引用地址(http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html)

分类: 开发者手册 MVC,MVP 和 MVVM 的图示 作者: 阮一峰 日期: 2015年2月 1日 复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身很容易理解,但是要讲清楚,它与衍生的 MVP 和 MVVM 架构的区别就不容易了. 昨天晚上,我读了<Scaling Isomorphic Javascript Code>,突然意识到,它们的区别非常简单.我用几段话,就可以说清. (题图: