- 浏览: 401106 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (309)
- xaml C# wpf (0)
- scala java inner clas (1)
- Tools UML Eclipse UML2 (1)
- Timer .NET Framework (1)
- perl (6)
- python function paramter (1)
- Python Docstring (1)
- Python how to compare types (1)
- Python (8)
- java (5)
- C# (76)
- C# WPF (0)
- p4 (0)
- WPF (46)
- .net (6)
- xaml (1)
- javascript (40)
- windows (10)
- scala (4)
- winform (1)
- c++ (48)
- tools (12)
- cmd (1)
- os (0)
- CI (0)
- shell (0)
- C (2)
- haskell (49)
- functional (1)
- tool (1)
- gnu (1)
- linux (1)
- kaskell (0)
- svn (0)
- wcf (3)
- android (1)
最新评论
The most common practise to implement the DataModel is by declaring the class to implements the INotifyPropertyChanged interface.
However, it is one of the many ways that you can implement data model, an alternative way is to use DependencyObject.
The rationale behind DependencyObject as the base class to implement data model is that it
- It has SetValue and GetValue to operate on those DependencyProperty
- It has the OnPropertyChanged(DependencyPropertyChangedEventArgs) to notify an update is on going.
We can define our Data Model as follow.
public string Message { get { return (string)GetValue(MessageProperty); } set { SetAndRaiseProeprtyChanged(MessageProperty, value); //SetValue(MessageProperty, value); } } // Using a DependencyProperty as the backing store for Message. This enables animation, styling, binding, etc... public static readonly DependencyProperty MessageProperty = DependencyProperty.Register("Message", typeof(string), typeof(DataModel), new UIPropertyMetadata(string.Empty)); private void SetAndRaiseProeprtyChanged(DependencyProperty dp, object newValue) { var oldvalue = GetValue(dp); SetValue(dp, newValue); OnPropertyChanged(new DependencyPropertyChangedEventArgs(dp, oldValue: oldvalue, newValue: newValue)); } }
and suppose that there is a view which consumes the data model, here is the view (window)
<Window x:Class="DependencyObjectDemo1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <StackPanel> <TextBlock Name="textBlock" Text="{Binding Message}" /> <Button Click="ChangeDataModel" Content="Click me to change DataModel"/> </StackPanel> </Window>
and here is the code that connect the data model and the view.
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); InitializeDataModel(); } public void InitializeDataModel() { var dataModel = new DataModel { Message = "Hello world" }; this.DataContext = dataModel; } private void ChangeDataModel(object sender, RoutedEventArgs e) { var dataModel = this.DataContext as DataModel; if (dataModel != null) { dataModel.Message = "New Message"; } } }
CAVEAT: it has been discussed on some other thread about the performance/memory hit by introducing the DependencyObject as the base class of Data model . Generally it is believed that the performance of DependencyObject over INotifyPropertyChanged (which is lightweighted) is that DependencyObject 's impl is slightly slower.
TODO:study and research the performance statistics to prove the performance advantage.
发表评论
-
wpf - example to enhance ComboBox for AutoComplete
2014-09-19 15:56 1979first let’s see an example ... -
WPF – Virtualization – VirutalizationStackPanel and ItemsPanelTemplate
2013-08-05 21:55 1421Topic: WPF – Virtualization – ... -
wpf - BehaviorBase and one use examples
2013-06-18 18:41 1318Behavior is something that we ... -
WPF - Setting foreground color of Entire window
2013-06-13 16:00 1925You might as well as I would s ... -
WPF - Enhanced TabControl - TabControlEx aka Prerendering TabControl
2013-06-13 13:12 5337As an opening word, let's che ... -
wpf - ControlTemplate and AddLogicChild/RemoveLogicalChild
2013-06-10 15:42 1191Recently I was trying to debug ... -
wpf - default implicit style
2013-05-10 10:24 796We know that if you left out ... -
wpf - Style setter on the attached property
2013-05-08 14:54 2857I believe that you are familia ... -
wpf - specify enum values in xaml
2013-05-08 11:31 3594Many a situation you find tha ... -
wpf - IG xamDataGrid bind to XmlDataProvider with Xml Island
2012-12-18 14:28 1290Sometimes you may bind to some ... -
wpf - translate winform button/mouse event to wpf events
2012-12-12 17:37 2166It is common that we sometimes ... -
wpf - Freezable and its meaning
2012-09-27 12:38 0This article is based on the di ... -
wpf - Customize the grid lines for original wpf Grid control
2012-09-27 12:01 1461The System.WIndows.Controls.Gri ... -
c# - Convert from System.Drawing.Image to System.WIndows.Media.ImageSource
2012-09-25 14:27 7421In Previous discussion, we have ... -
wpf - Get Effective DependencyProperty value on a DependencyObject
2012-08-28 19:05 1048As discussed in my previous pos ... -
wpf - Default(Theme) style and its DefaultStyleKey
2012-08-28 17:54 1392As dicsused in the subsection o ... -
wpf - Dependency Property Value Precedence
2012-08-28 18:56 886A dependency property to an Dep ... -
wpf - WPF TemplateBinding vs RelativeSource TemplatedParent
2012-08-28 14:20 3719This is a post that summarizes ... -
wpf - ICutomTypeDescriptor , PropertyDescriptor and its use in PropertyGrid
2012-08-28 14:04 3589The type ICustomTypeDe ... -
wpf - tips to convert UI controls in WPF/Silverlight/Winforms into a Bitmap
2012-08-27 17:44 986In previous discussion, we have ...
相关推荐
gong-wpf-dragdrop, GongSolutions.WPF.DragDrop 库是WPF的拖动'n'拖放框架 简介GongSolutions.WPF.DragDrop 库是一个易于使用的拖拉'n'拖放框架。特性使用 MVVM: 拖放逻辑可以放在ViewModel中。 代码不需要放在in中...
通用WPF主题控件包rubyer-wpf-master是一款专为Windows Presentation Foundation (WPF) 应用程序设计的开源UI框架。它提供了丰富的主题和控件,旨在帮助开发者快速构建美观且用户友好的应用程序界面。在2.0.0版本中...
标题中的“wpf-mvvm-DeskTop-Sample-master”表明这是一个关于WPF(Windows Presentation Foundation)桌面应用程序的示例项目,使用了MVVM(Model-View-ViewModel)设计模式。这个项目是用C#编程语言编写的,面向的...
**WPF-Blockly** 是一个基于Windows Presentation Foundation (WPF) 的图形化编程工具,它为用户提供了构建和设计程序的直观界面。WPF作为Microsoft .NET Framework的一部分,主要用于构建桌面应用程序,它提供了...
超酷WPF数据可视化,全套源程序,非常适合做数据可视化的程序员使用,WPF,XAML。 找了好久的资源,附有很多很详细的插图,是大数据时代不可缺少的可视化学习数据,仅供大家学习使用请勿用做商业用途。与大家一起...
在这个名为"WPF-ControlBase-master.zip"的压缩包中,我们可以推测它包含了一个基于WPF的控制库项目,可能是一个开源或者个人开发的项目,用于提供自定义的WPF控件。这些控件可能是对标准WPF控件的扩展或增强,也...
C#开发WPF-Silverlight动画及游戏系列教程-深蓝色右手 C#开发WPF-Silverlight动画及游戏系列教程-深蓝色右手 C#开发WPF-Silverlight动画及游戏系列教程-深蓝色右手
WPF的基本空间历程,使用.net core3.0.1版本
**Prism-Samples-Wpf-master06-10.zip** 是一个包含多个示例项目的压缩包,主要用于展示如何在Visual Studio 2017中使用 **WPF (Windows Presentation Foundation)** 和 **Prism** 框架进行开发。Prism是微软支持的...
在“Wpf-glTF-testing.zip”压缩包中,我们有一个基于WPF(Windows Presentation Foundation)的简化glTF文件查看器项目。 WPF是.NET Framework的一部分,是一个用于构建Windows桌面应用程序的框架。它提供了丰富的...
通过深入研究WPF-Diagram-Designer的源代码(如WPF-Diagram-Designer-master文件夹中的内容),开发者不仅可以学习到如何在WPF中构建复杂的图形界面,还可以了解到图形编辑器的设计原理和实现细节,对于提升图形应用...
在这个“wpf-datagrid-access DB”主题中,我们将深入探讨如何利用WPF Datagrid与Microsoft Access数据库进行交互,实现数据的读取、更新和保存。 1. **WPF Datagrid简介** - Datagrid是WPF中的一个数据展示控件,...
“wpf---StatusBar”这个标题表明我们将探讨的是WPF(Windows Presentation Foundation)框架中的StatusBar组件。WPF是.NET Framework的一部分,用于构建桌面应用程序,它提供了丰富的用户界面(UI)功能。StatusBar...
**WPF - 强大的图表技术** Windows Presentation Foundation (WPF) 是Microsoft开发的一个用于构建桌面应用程序的框架,它提供了丰富的图形系统,包括对2D和3D图形的强大支持。在WPF中,开发人员可以利用各种图表...
**WPF-ScreenData项目详解** **一、WPF简介** WPF(Windows Presentation Foundation)是微软.NET Framework的一部分,主要用于构建Windows桌面应用程序。它提供了一种全新的用户界面开发模型,结合了丰富的图形、...
WPF 快速添加新手引导功能(支持 MVVM) 本文将介绍如何快速添加新手引导功能到 WPF 项目中,采用 MVVM 模式,并使用开源项目 AIStudio.Wpf.Controls 的修改版本 9WPFControls 实现新手引导功能。下面将详细介绍...
该资源"practical-wpf-charts-graphics-master.rar"包含了这本书的源代码,为读者提供了丰富的实践案例和深入理解WPF图表及图形编程的宝贵材料。 WPF(Windows Presentation Foundation)是.NET Framework的一部分...
**WPF-MVVM计算器详解** Windows Presentation Foundation (WPF) 是Microsoft开发的一种用户界面框架,用于构建桌面应用程序。在WPF中,Model-View-ViewModel(MVVM)设计模式是一种广泛采用的架构模式,它将业务...
**WPF-MvvmLight** 是一个面向初学者的教程资源,旨在帮助他们理解并实践如何在Windows Presentation Foundation(WPF)应用中使用MvvmLight框架。MvvmLight,全称Model-View-ViewModel Light,是由GalaSoft开发的一...
C#开发WPF-Silverlight动画及游戏系列教程-深蓝色右手 C#开发WPF-Silverlight动画及游戏系列教程-深蓝色右手 C#开发WPF-Silverlight动画及游戏系列教程-深蓝色右手