WPF基本之元素绑定_玖富娱乐主管发布


玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。

 元素绑定

数据绑定最简朴的情势是源对象是WPF元素而且源属性是依靠项属性。依靠项属性具有内置的变动关照支撑。因而当源对象中转变依靠属性的值时,会马上更新目的对象中的绑定属性。

 绑定表达式

当运用绑定表达式时,没必要对源对象做任何修改,只需设置装备摆设源对象使其属性具有准确的值局限。
<Slider Grid.Row="0" Name="sliderFontSize" Margin="3" Minimum="1" Maximum="40" Value="10" TickFrequency="1" TickPlacement="TopLeft"> 
</Slider> <TextBlock Grid.Row="1" Margin="10" Text="Simple Text" Name="lblSimpleText"FontSize="{Binding ElementName=sliderFontSize,Path=Value}"> </TextBlock>

 绑定毛病

WPF不会激发异常来关照与数据绑定相干的题目。若是指定的元素或属性不存在,那末不会收到任何的指导;相反,只是不克不及在目的属性中显现数据。 调试可通过Visual Studio的OutPut窗口检察,WPF会输出绑定细节的跟踪信息。

 绑定形式

称号 申明
OneWay 当源属性转变时更新目的属性。
TwoWay 当源属性转变时更新目的属性,而且当目的属性转变时更新源属性。
OneTime 最后依据源属性设置目的属性,但是,厥后的一切转变都会被疏忽。一般若是晓得属性不会转变,可通过这类形式下降开支。
OneWayToSource 与OneWay相反,当目的属性转变时更新源属性。
Default 此类绑定依靠于目的属性,既可所以双向的,也可所以单向的。除非明白指定了一种绑定形式,不然一切绑定运用该要领

 运用代码建立绑定

Binding binding = new Binding();
binding.Source = sliderFontSize;
binding.Path = new PropertyPath("Value");
binding.Mode = BindingMode.TwoWay;
lblSimpleText.SetBinding(TextBlock.FontSizeProperty,binding);

 多绑定

能够设置TextBlock元素从文本框中猎取文本,从零丁的色彩列表中挑选以后前景色和背景色,等等。
      <TextBlock Grid.Row="1" Margin="10" Name="lblSimpleText"
                   FontSize="{Binding ElementName=sliderFontSize,Path=Value}"
                   Text="{Binding ElementName=txtContent,Path=Text}"
                   Foreground="{Binding ElementName=lstColors,Path=SelectedItem.Tag}"> 
        </TextBlock>
还可链接数据绑定。比方TextBox.Text属性建立表达式以链接到TextBlock.FontSize属性,而TextBlock.FontSize又链接到Slider.Value属性的绑定表达式。

 绑定更新

源的转变会马上影响目的,但是反向的通报从目的到源未必会马上发作。他们的行动由Binding.UpdateSourceTrigger属性掌握。  
称号 申明
PropertyChanged 当目的属性转变时马上更新源。
LostFocus 当目的属性转变而且目的属性落空核心时跟新源。
Explicit 除非挪用BindingExpression.UpdateSource()要领,不然没法更新源。
Default 依据目的属性的元素肯定更新行动。大多数属性的默许行动是PropertyChanged,但TextBox.Text属性的默许行动是LostFocus
表中列出的值不影响目的的更新体式格局,他们仅掌握OneWay或OneWayToSource形式的绑定中源的更新体式格局。

 绑定耽误

用户住手输入500毫秒后更新源对象  
<TextBox Text="{Binding ElementName=txtSampleText,Path=FontSize,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Delay=500}" Name="txtFontSize">
</TextBox>

 绑定到非元素对象

WPF数据绑定基本构造不克不及猎取私有信息或公有字段,必需是公有属性中。 绑定到非元素对象时,须要摒弃Binding.ElementName属性,并运用以下属性之一。
  • Source:该属性是指向源对象的援用,供应数据的对象。
  • RelativeSource:这是援用,运用RelativeSource对象指向源对象。有了这个附加层,在在以后元素的基本上构建援用。这好像增加了庞杂水平,
 但实际上RelativeSource属性是一种特别对象,当编写控件模版及数据模版时是很轻易的。
  • DataContext:若是没有运用Source或RelativeSource属性指定源,WPF就从以后元素最先在元素树中向上查找。搜检每一个属性的DataContext属性,并运用第一个飞空的DataContext属性。
当将统一个对象的多个属性绑定到分歧的元素时,DataContext属性黑白常有效的,由于可在更高条理的容器对象上,设置DataContext属性。

 Source

绑定到静态对象
  <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock>

2.绑定到资本

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。-
 <Window.Resources>
        <FontFamily x:Key="CoustomFont">Calibri</FontFamily>
    </Window.Resources>
    <Grid>
        <TextBlock Text="{Binding Source={StaticResource CoustomFont},Path=Source}"></TextBlock>
    </Grid>

 RelativeSource

<TextBlock Text="{Binding Path=Title,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}}}"></TextBlock>
RelativeSource对象运用FindAncestor形式,该形式示知查找元素树晓得发明AncestorType属性界说的元素范例。 FindAncestor形式有4种。
称号                  申明
Self 表达式绑定到统一元素的另一个属性上。
FindAncestor 表达式绑定到父元素。WPF将查找元素树直至发明希冀的父元素。为了指定父元素,还必需设置AncestorType属性以指导愿望查找的父元素范例。另外,还能够用AncestorLevel属性略过发明的肯定的数目的特定元素。比方当一棵树中查找时,若是愿望绑定到第三个ListBoxItem范例的元素,应该运用以下设置,AncestorType={x:Type ListBoxItem};而且AncestorLevel=3,从而略过前连个ListBoxItem元素。默许值是1,并在找到第一个婚配的元素住手查找。
PreviousData 表达式绑定到数据绑定列表中前一个数据项。在列表中运用这类形式。
TemplateParent 表达式绑定到运用模版的元素。只有当绑定位于控件模版或数据模版内部时,这类形式能力事情。

 DataContext属性

 大批元素绑定到统一对象。
<TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock>
 <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock>
 <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock>

能够改成以下

<StackPanel DataContext="x:Static SystemFonts.IconFontFamily">
        <TextBlock Text="{Binding Path=Source}"></TextBlock>
        <TextBlock Text="{Binding Path=Source}"></TextBlock>
        <TextBlock Text="{Binding Path=Source}"></TextBlock>
 </StackPanel>

 

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。