UML 类图

  • 里面的构造
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Navigation;

using System.Windows.Data;

namespace Silverlight50.Binding
{
    public partial class UpdateSourceTrigger : Page
    {
        public UpdateSourceTrigger()
        {
            InitializeComponent();
        }

        private void btnBinding_Click(object sender, RoutedEventArgs e)
        {
            // 显示触发 txtExplicit 的数据更新
            BindingExpression be = txtExplicit.GetBindingExpression(TextBox.TextProperty);
            be.UpdateSource();
        }
    }
}
    • 关联类 

Binding/ImplicitDataTemplate.xaml.cs

  • 角色

三 、ImplicitDataTemplate(隐式钦赐数量模板)
Binding/ImplicitDataTemplate.xaml

  • 类的属性

OK
[源码下载] 

   
 UML结构图的更有效的机能之一是新的内部结构记号。它同意你显得1个类或其它的3个分类器怎么着在其间整合。因为记号限制你只可以突显四个类所享有的汇集关系。内部的布局记号让你更明了地呈现类的一一部分怎样保险关系。

介绍
Silverlight 5.0 绑定

 

Binding/AncestorRelativeSource.xaml.cs

 

② 、AncestorRelativeSource(绑定父级链上的因素)
Binding/AncestorRelativeSource.xaml

图片 1

示例
① 、StyleSetter(Style 中的 Setter 支持绑定)
Binding/StyleSetter.xaml

name : attribute type = default value

4、FrameworkElement.DataContextChanged
Binding/DataContextChanged.xaml

贰个或五个

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Navigation;

namespace Silverlight50.Binding
{
    public partial class DataContextChanged : Page
    {
        public DataContextChanged()
        {
            InitializeComponent();

            this.Loaded += new RoutedEventHandler(DataContextChanged_Loaded);
        }

        void DataContextChanged_Loaded(object sender, RoutedEventArgs e)
        {
            // 绑定初始数据上下文
            listBox.DataContext = new List<string> { "a", "b", "c" };
        }

        private void btnChange_Click(object sender, RoutedEventArgs e)
        {
            // 修改数据上下文
            listBox.DataContext = new List<string> { "x", "y", "z" };
        }

        private void listBox_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            /*
             * FrameworkElement.DataContextChanged - 数据上下文发生改变后所触发的事件
             */

            // 数据上下文发生改变后
            MessageBox.Show("数据源发生改变");
        }
    }
}

   
 绘制类的内在结构将会革新这种情景。起先时,你通过用三个区域画1个方格。最顶端的区域包涵类名字,而较低的区域包括类的内部结构,展现在它们父类中顶住区别角色的部分类,剧中人物中的各类部分类也关系到其余类。下图浮现了Plane类的内部结构;注意内部结构如何澄清混乱性。

Binding/UpdateSourceTrigger.xaml.cs

 

<navigation:Page x:Class="Silverlight50.Binding.DataContextChanged" 
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
           mc:Ignorable="d"
           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           d:DesignWidth="640" d:DesignHeight="480"
           Title="DataContextChanged Page">
    <StackPanel x:Name="LayoutRoot">

        <Button x:Name="btnChange" Content="改变数据上下文" Click="btnChange_Click" />
        <ListBox x:Name="listBox" ItemsSource="{Binding}" DataContextChanged="listBox_DataContextChanged" />

    </StackPanel>
</navigation:Page>

     让我们看2个实例。在图中大家有3个类图以表现三个Plane类如何由多个引擎和八个控制软件对象组成。从那几个图中省略的东西是展现关于飞机部件怎么样棉被服装配的部分信息。你不也许说明,是每一个控制软件对象说了算五个引擎,还是二个控制软件对象说了算多少个引擎,而另叁个说了算2个引擎。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Navigation;

namespace Silverlight50.Binding
{
    public partial class AncestorRelativeSource : Page
    {
        public AncestorRelativeSource()
        {
            InitializeComponent();

            listBox.ItemsSource = new List<string>(){"1", "2", "3"};
        }
    }
}

 

<navigation:Page x:Class="Silverlight50.Binding.UpdateSourceTrigger" 
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
           mc:Ignorable="d"
           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           d:DesignWidth="640" d:DesignHeight="480"
           Title="UpdateSourceTrigger Page">
    <StackPanel x:Name="LayoutRoot">

        <!--
            UpdateSourceTrigger - UI 上数据更新的触发方式
                Default - 失去焦点后触发
                PropertyChanged - 属性值发生改变后触发
                Explicit - 需要通过 BindingExpression.UpdateSource() 显示触发
        -->
        <TextBox Text="{Binding Text, Mode=TwoWay, ElementName=lbl, UpdateSourceTrigger=Default}" />
        <TextBox Text="{Binding Text, Mode=TwoWay, ElementName=lbl, UpdateSourceTrigger=PropertyChanged}" />
        <TextBox Name="txtExplicit" Text="{Binding Text, Mode=TwoWay, ElementName=lbl, UpdateSourceTrigger=Explicit}" />
        <Button Name="btnBinding" Content="显示触发更新" Click="btnBinding_Click" />

        <TextBlock Name="lbl" />

    </StackPanel>
</navigation:Page>
  • 论及关系
<navigation:Page x:Class="Silverlight50.Binding.StyleSetter" 
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
           mc:Ignorable="d"
           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           d:DesignWidth="640" d:DesignHeight="480"
           Title="StyleSetter Page"

           xmlns:clr="clr-namespace:System;assembly=mscorlib">

    <Grid x:Name="LayoutRoot">

        <Grid.Resources>
            <!--设置一些资源-->
            <clr:Int32 x:Key="TextFontSize">24</clr:Int32>
            <SolidColorBrush x:Key="TextForeground" Color="#00FF00" />

            <!--为 Style 的 Setter 的 Value 做数据绑定-->
            <Style x:Key="MyStyle" TargetType="TextBox">
                <Setter Property="FontSize" Value="{Binding Source={StaticResource TextFontSize}}"/>
                <Setter Property="Foreground" Value="{Binding Source={StaticResource TextForeground}}"/>
            </Style>
        </Grid.Resources>

        <!--应用样式-->
        <TextBox Text="我是TextBox" Margin="5" Style="{StaticResource MyStyle}" />

    </Grid>
</navigation:Page>
  • 分类
    • interface
    • utility
    • abstract(斜体表示)

作者:webabcd

   
 类图用于表示类的静态内容以及它们中间的关联,在中间能够显得出类的积极分子变量和成员函数,以及类之间的接续和引用关系。

<navigation:Page x:Class="Silverlight50.Binding.ImplicitDataTemplate" 
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
           mc:Ignorable="d"
           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           d:DesignWidth="640" d:DesignHeight="480"
           Title="ImplicitDataTemplate Page"

           xmlns:local="clr-namespace:Silverlight50.Binding">

    <StackPanel x:Name="LayoutRoot" Orientation="Vertical">

        <StackPanel.Resources>
            <!--
                DataType - 如果数据项为此类型则使用此模板(隐式)
            -->
            <DataTemplate DataType="local:Person">
                <TextBlock Foreground="Red" Text="{Binding Name}" />
            </DataTemplate>
            <DataTemplate DataType="local:Employee">
                <TextBlock Foreground="Blue" Text="{Binding Name}" />
            </DataTemplate>
        </StackPanel.Resources>

        <!--数据源的数据项为 Person 类型,所以会使用第一个数据模板-->
        <ListBox x:Name="listBoxPersons" />

        <!--数据源的数据项为 Employee 类型,所以会使用第二个数据模板-->
        <ListBox x:Name="listBoxEmployees" />

    </StackPanel>
</navigation:Page>

五 、UpdateSourceTrigger(UI 上多少更新的触及格局)
Binding/UpdateSourceTrigger.xaml

   
 不过,仅仅展现一些实例而尚未它们的涉及不太实用;因而,UML也同目的在于实体层的关联/关联建立模型。绘制关联与一般的类关系的平整平等,除了在建立模型关联时有八个外加的要求。附加的限定是,关联关系必须与类图的关联相平等,而且涉嫌的剧中人物名字也亟须与类图相平等。

  • StyleSetter – Style 中的 Setter 协理绑定
  • AncestorRelativeSource – 绑定父级链上的要素
  • ImplicitDataTemplate – 隐式钦赐数量模板
  • FrameworkElement.DataContextChanged
  • UpdateSourceTrigger – UI 上多少更新的触发方式

0到5个

Binding/DataContextChanged.xaml.cs

表示

在线DEMO
http://www.cnblogs.com/webabcd/archive/2012/03/05/2379862.html

Instance Name : Class Name
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Navigation;

using System.Collections.ObjectModel;

namespace Silverlight50.Binding
{
    public partial class ImplicitDataTemplate : Page
    {
        public ImplicitDataTemplate()
        {
            InitializeComponent();

            this.Loaded += new RoutedEventHandler(ImplicitDataTemplate_Loaded);
        }

        void ImplicitDataTemplate_Loaded(object sender, RoutedEventArgs e)
        {
            // 为 listBoxPersons 绑定的数据源的数据项为 Person 类型
            listBoxPersons.ItemsSource = new ObservableCollection<Person>
            {
                new Person { Name = "webabcd" },
                new Person { Name = "webabcd2" }
            };

            // 为 listBoxEmployees 绑定的数据源的数据项为 Employee 类型
            listBoxEmployees.ItemsSource = new ObservableCollection<Employee>
            {
                new Employee { Name = "webabcd3" },
                new Employee { Name = "webabcd4" },
                new Employee { Name = "webabcd5" }
            };
        }
    }

    public class Person
    {
        public string Name { get; set; }
    }

    public class Employee : Person
    {
        public string Position { get; set; }
    }
}

 

<navigation:Page x:Class="Silverlight50.Binding.AncestorRelativeSource" 
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
           mc:Ignorable="d"
           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           d:DesignWidth="640" d:DesignHeight="480"
           Title="AncestorRelativeSource Page">
    <Grid x:Name="LayoutRoot">

        <!--
            关于 RelativeSource 参看 http://www.cnblogs.com/webabcd/archive/2009/09/03/1559240.html
        -->

        <!--
            Silverlight 5 的 RelativeSource(除了 Self 和 TemplatedParent 外)新增了 FindAncestor

            FindAncestor - 指定相对数据源为父级链上的元素(如果指定了 AncestorType 或 AncestorLevel 则为 FindAncestor 模式,即可以不用显示指定 FindAncestor)
            AncestorType - 数据源的类型
            AncestorLevel - 数据源相对于自己的相隔层级数,AncestorLevel = 1 代表最近的父级元素
        -->

        <ListBox Tag="我是 Tag" Name="listBox">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Tag, RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox, AncestorLevel=1}}"/>
                        <TextBlock Text="{Binding}"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

    </Grid>
</navigation:Page>

图片 2

[索引页]
[源码下载]

  • 可见性
      •  public
    • #  protected
      •   private
    • ~  package

从长商议Silverlight(64) – 5.0绑定之 Style 中的 Setter 扶助绑定,
绑定父级链上的成分, 隐式钦定数量模板, UI 上数据更新的接触方式

 

1..*

  • 软件包

3

   
 关联是八个类间的联网。关联合国善后救济总署是被假定是双向的;那象征,八个类相互领悟它们间的关联,除非您限定一些任何项指标涉及。

name(parameter list) : type of value returned
操作名称 返回参数 值类型
delayFlight
Name Type
numberOfMinutes Minutes
N/A
getArrivalTime N/A Date
    • 结缘关系

   
 完毕关系是2个类定义注明,另叁个类来兑现它。一条带有闭合的单向箭头的点线意味着达成。

0..5

图片 3

   
 类的属性节在分隔线上列出每3个类的质量。属性节是可挑选的,假设一用它,就包罗类的列表显示的各类属性。在工作类图中,属性类型一般与单位符合,那对于图的只怕读者是有意义的。然则用于转移代码的类图,要求类的品质类型必须界定在由程序语言提供的品类之中,或含有于在系统中贯彻的模型的花色之中。

   
 类的UML表示是1个星型,垂直地分成八个区,顶部区域展现类的名字,中间的区域列出类的习性,底部的区域列出类的操作。

   
 关联关系是一种普遍存在的关联,它指四个类的实例之间存在稳定的接连,即当三个类的靶子作为另2个类的对象的变量成员,它使三个类知道另3个类的属性和方法
,那样多少个类就存在涉嫌关系。

      • 属性暗许值

   
 当一个系统结营造模时,呈现例子类实例有时候是卓有成效的。实例的符号和类一样,不过代表顶端区域中仅有的类名,它的名字是透过拼接的。

图片 4

只能3个

      • 属性关联类型

图片 5

 

   
 组合关系是汇集关系的愈益深化,子类实例的生命周期重视于父类实例的生命周期。在图中,呈现了Company类和Department类之间的重组关系,注意组合关系如聚合关系一样绘制,不过本次菱形是被填充的。在图中的关系建模中,二个Company类实例至少总有四个Department类实例。因为涉嫌是构成关系,当Company实例被移除/销毁时,Department实例也将自动地被移除/销毁。组合聚合的另三个第贰职能是局部类只可以与父类的实例相关。

图片 6

0..1

图片 7

 

 

    • 反射关系

 

 

 

   
 继承指的是1个子类继承3个父类的功力,并追加它和谐的新职能。为了在一个类图上建立模型继承,从子类拉出一条闭合的单键头(或三角形)的实线指向父类。

  • 类图

图片 8

    • 双向关联

图片 9

图片 10

     举例来说,大家能够设想,车是2个总体实体,而车轮、轮胎是整辆车的一局地。轮胎能够在交待到车时的前多少个星期被制作,并放置于仓库中。在那么些实例中,Wheel类实例清楚地独自地Car类实例而留存。可是,有个别景况下,部分类的生命周期并不单独于全体类的生命周期,那称为合成聚合。举例来说,考虑公司与单位的关系。集团和部门都建立模型成类,在铺子存在在此以前,部门无法存在。那里Department类的实例注重于Company类的实例而留存。

  • 类的操作

 

图片 11

含义

5..15

图片 12

 

图片 13

 

 

   
 聚合是一种专门类型的关系,用于描述“总体到有的”的涉嫌。在基本的集结关系中,部分类的生命周期独立于全体类的生命周期。

   
 建模类的实例有时比期望的一发详细。有时,你只怕独自想要在3个较多的貌似层次做类关系的模子。在这种景色下,你应当使用剧中人物记号。剧中人物记号类似于实例记号。为了树立类的剧中人物模型,你画三个方格,并在中间放置类的剧中人物名及类名,作为实体记号,可是在这状态你不可能加下划线。注意,你不能够在纯粹类图中做类剧中人物的建立模型,为了选用剧中人物记号,你将会要求采纳下边斟酌的内部结构记号。

   
 在3个单向关系中,多个类是相关的,可是唯有2个类知道那种交流的留存。

图片 14

 

  • 一连关系

0..*

   
 类的操作记录在类图长方形的第四个区域中,它也是可选用的。和属性一样,类的操作以列表格式呈现,各类操作在它本人线上。操作使用下列记号表现

图片 15

   
 在上海体育场面中,继承关系由各种父类的单独的线画出,那是在IBM Rational
罗斯和IBM Rational
XDE中运用的主意。可是,有一种名叫树标记的备选格局能够画出继承关系。当存在多少个或更加多子类时,除了再而三线象树枝一样混在联合外,你能够使用树形记号。

  • 实例

 

想必的多重值描述

0个或多个

 

属性名称 属性类型
flightNumber Integer
departureTime Date
flightDuration Minutes

   
 一个单方面包车型客车关系,表示为一条带有指向已知类的盛开箭头的实线。仿佛标准提到,单向关系包涵1个角色名和1个多重值描述,但是与正式的双向关联差别的时,单向关系只含有已知类的剧中人物名和多重值描述。OverdrawnAccountsReport
知道 BankAccount 类,而且知道 BankAccount
类扮演“overdrawnAccounts”的角色。但是,和正式提到区别,BankAccount
类并不知道它与 OverdrawnAccountsReport 相关联。

 

name : attribute type
flightNumber : Integer

图片 16

*

    • 单向关联 
  • 依傍关系

   
 重视关系是代表“使用”的语义,1个类重视另3个类并且延续单向的,用饱含箭头的虚线表示。能够差不多的知晓,正是二个类A使用到了另3个类B,而那种使用关系是独具偶然性的、一时半刻性的、十一分弱的,可是B类的变型会影响到A;比如某人要过河,必要借用一条船,此时人与船之间的涉及就是依靠;表今后代码层面,为类B作为参数被类A在某些method方法中采用。

只能1个

   
 在关系建立模型中,存在一些场馆下,你必要包罗其余类,因为它含有了关于关联的有价值的音信。对于那种情状,你会选用关联类来绑定你的着力关系。关联类和一般类一样表示。分歧的是,主类和关联类之间用一条相交的点线连接。在Flight类和FrequentFlyer类之间的关联,发生了名叫MileageCredit的关联类。那象征当Flight类的三个实例关联到FrequentFlyer类的1个实例时,将会时有产生MileageCredit类的二个实例。

图片 17

  • 得以实现关系
  • 多重值和它们的象征

5到15个

1

 

0个或几个

 

0个或1个

   
 软件包使建立模型者能够组织模型分类器到名字空间中,那有个别象文件系统中的文件夹。把二个体系分为三个软件包使系统成为简单精晓,特别是在各类软件包都表现系统的三个特定部分时。

     因为突显实例的目标是展现值得注意的或有关的音信,没要求在你的模型中蕴涵全体实体性质及操作。相反地,仅仅显示感兴趣的性质及其值是完全适用的。

图片 18

    • 会面关系

   
 类也得以选拔反射关联与它自己相关联。早先,那大概没有意思,可是切记,类是空虚的。下图显示多个Employee类怎样通过manager
/
manages角色与它自己有关。当一个类关联到它本身时,那并不代表类的实例与它自己有关,而是类的2个实例与类的另三个实例相关。图描绘的关联说贝拉米(Bellamy)(Beingmate)个Employee实例大概是此外3个Employee实例的经纪。不过,因为“manages”的涉嫌剧中人物有
0..*的多重性描述;三个雇员或许不受任何其余雇员管理。

   
 三个双向关联用七个类间的实线表示。在线的任一端,你放置一个剧中人物名和多重值。Flight与三个特定的Plane相关联,而且Flight类知道那个关系。因为剧中人物名以Plane类表示,所以Plane承担关联合中学的“assignedPlane”剧中人物。紧接于Plane类前边的多重值描述0…1意味着,当一个Flight实体存在时,能够有一个或没有Plane与之提到。也体现Plane知道它与Flight类的涉嫌。在那一个关系中,Flight承担“assignedFlights”剧中人物;Plane实体能够不与flight关联或与从不上限的flight关联。