Data Binding
markup extensions(quotation marks are not allowed)-{Binding ..}(wpf属性系统的重要标志!)
<TextBlock Text=”{Binding ElementName=SampleText, Path=Text}”
FontFamily=”{Binding ElementName=FontList,
Path=SelectedItem}”
FontSize=”10”
TextWrapping=”Wrap”
Margin=”0 0 0 4” />
(property:ElementName-Path is a set of name-value,or object-property)
<StackPanel>
<TextBlock Text=”This is fun!”
FontSize=”{Binding ElementName=mySlider,Path=Value}”
HorizontalAlignment=”Center” />
<Slider x:Name=”mySlider”
Minimum=”8”
Maximum=”64” />
</StackPanel>
two-way data binding
Property-Mode,its value determines how the data will flow between the data source and the target;
default:TextBox-TwoWay,TextBlock-OneWay;
Name | Description |
OneWay | Changes to the source will update the target. |
TwoWay | Changes to the source will update the target, and changes on the target will update the source. |
OneTime | The target is set only when the application starts or when the data context is changed. |
OneWayToSource | Changes to the target will update the source. |
X:Static-search for StaticExtension,used to retrieve data from static value members on classes;
DataContext-“context” or the “starting point” from which the data binding is taking place
all the controls in WPF inherit from FrameworkElement;DataContext is the property of FrameworkElement;
"ElementName-Path" is explicitly apporach for providing a context;
a control’s DataContext is inherited from its parent;
对比两段代码的效果:
<ListBox x:Name=”FontList”
DataContext=”{x:Static Fonts.SystemFontFamilies}”
DockPanel.Dock=”Left”
ItemsSource=”{Binding}”
ToolTip=”{Binding Path=Count, Mode=OneTime}”
Width=”160” />
<ListBox x:Name=”FontList”
DataContext=”{x:Static Fonts.SystemFontFamilies}”
DockPanel.Dock=”Left”
ItemsSource=”{Binding}”
Width=”160”>
<ListBox.ToolTip>
<ToolTip>
<StackPanel Orientation=”Horizontal”>
<TextBlock Text=”{Binding Path=Count,Mode=OneTime}”/>
<TextBlock Text=” fonts are installed.”/>
</StackPanel>
</ToolTip>
</ListBox.ToolTip>
</ListBox>
WPF property system
allows properties to participate in data binding, styling, animation,and several other exciting features;
WPF特征编程的源头;
dependency property-用WPF属性系统注册的属性(是否是依赖属性可查官方文档)
-include metadata about the property,such as the default value for the property, the default binding mode, and other miscellaneous items;
-provide automatic change notification;
-a property must be a dependency property to be the target of a data binding;
-data sources are not required to be dependency properties;
change notification mechanism:
object code method 1
-property setter,raise a propertyname+Changed event;WPF automatically checks for this event and updates data bindings accordingly;
object code method 2
-class owns property,implement INotifyPropertyChanged;
以下等效:
<!--xaml形式-->
<TextBox>
<TextBox.Text>
<Binding Path=”FirstName Mode=”TwoWay” />
</TextBox.Text>
</TextBox>
<!--markup extension形式-->
<TextBox Text=”{Binding Path=FirstName,Mode=TwoWay}” />
备注:Label标签的Target属性,是指Label连接的目标控件。