zoukankan      html  css  js  c++  java
  • 无废话WPF系列9: Binding的源

    1. 绑定到其它元素

    <Grid>
        <StackPanel>
            <TextBox x:Name="textbox1" />
            <Label Content="{Binding ElementName=textbox1, Path=Text}" />
        </StackPanel>
    </Grid>
     

    2. 绑定到静态资源

    <Window.Resources>
            <ContentControl x:Key="text">Hello, World!</ContentControl>
    </Window.Resources>
    <Grid>
        <StackPanel>
            <Label x:Name="label1" Content="{Binding Source={StaticResource text}}" />
        </StackPanel>
    </Grid>
    3. 绑定到自身
    <Grid>
        <StackPanel>
            <Label x:Name="label1" Content="{Binding RelativeSource={RelativeSource Self}, Path=Name}" />
        </StackPanel>
    </Grid>

    4. 绑定到指定类型的父元素

    <Grid x:Name="Grid1">
            <StackPanel>
                <Label x:Name="label1" Content="{Binding RelativeSource={RelativeSource FindAncestor, 
                    AncestorType={x:Type Grid}}, Path=Name}" />
            </StackPanel>
    </Grid>

    5. 绑定到对象

    public class Person 
       { 
           public string Name { get; set; } 
           public int Age { get; set; } 
       } 
    <StackPanel x:Name="stackPanel"> 
            <StackPanel.DataContext> 
                <local:Person Name="Jack" Age="30"></local:Person> 
            </StackPanel.DataContext> 
            <TextBlock  Text="{Binding Path=Name}"></TextBlock> 
            <TextBlock Text="{Binding Path=Age}"></TextBlock>        
    
    </StackPanel>

    6. 绑定到集合

    public class Person 
        { 
            public string Name { get; set; } 
            public int Age { get; set; } 
        }
    
        public class PersonList : ObservableCollection<Person> 
        { }
    <Window.Resources> 
           <local:PersonList x:Key="person"> 
               <local:Person Name="Jack" Age="30"></local:Person> 
               <local:Person Name="Tom" Age="32"></local:Person> 
           </local:PersonList> 
       </Window.Resources> 
       <StackPanel x:Name="stackPanel"> 
           <ListBox  ItemsSource="{Binding Source={StaticResource ResourceKey=person}}" 
                      DisplayMemberPath="Name">            
           </ListBox> 
    </StackPanel>

    7. DataContext共享源

    我们需要将同一资源绑定到多个 UI 元素上,很显然到处写 "{Binding Source={StaticResource person}}" 是件很繁琐且不利于修改的做法。WPF 提供了一个称之为 "数据上下文 (DataContext)" 的东西让我们可以在多个元素上共享一个源对象,只需将其放到父元素 DataContext 属性即可。当我们不给 Binding 扩展标志指定 Source 属性时,它会自动寻找上级父元素的数据上下文。

    <Window.Resources> 
            <local:PersonList x:Key="person"> 
                <local:Person Name="Jack" Age="30"></local:Person> 
                <local:Person Name="Tom" Age="32"></local:Person> 
            </local:PersonList> 
        </Window.Resources> 
        <StackPanel x:Name="stackPanel" DataContext="{StaticResource person}"> 
            <ListBox  ItemsSource="{Binding}" 
                       DisplayMemberPath="Name">            
            </ListBox> 
        </StackPanel>

    8. 使用XML作为Binding的源

    XML:

    <?xml version="1.0" encoding="utf-8" ?> 
    <PersonList> 
      <Person Id="1"> 
        <Name>Jack</Name> 
      </Person> 
      <Person Id="2"> 
        <Name>Tom</Name> 
      </Person> 
      <Person Id="3"> 
        <Name>Justin</Name> 
      </Person> 
      <Person Id="4"> 
        <Name>David</Name> 
      </Person> 
    </PersonList> 

    XAML:

    <StackPanel> 
           <ListView x:Name="personListView"> 
               <ListView.View> 
                   <GridView> 
                       <GridViewColumn Header="Id" Width="100" 
                                        DisplayMemberBinding="{Binding XPath=@Id}"/> 
                       <GridViewColumn Header="Name" Width="100" 
                                        DisplayMemberBinding="{Binding XPath=Name}"/> 
                   </GridView> 
               </ListView.View> 
           </ListView>    
           <Button Click="Button_Click">Load Data</Button> 
       </StackPanel> 

    后台代码:

    private void Button_Click(object sender, RoutedEventArgs e) 
            { 
                XmlDocument xmlDocument = new XmlDocument(); 
                xmlDocument.Load("Person.xml");
    
                XmlDataProvider xdp = new XmlDataProvider(); 
                xdp.Document = xmlDocument; 
                xdp.XPath = @"/PersonList/Person";
    
                this.personListView.DataContext = xdp; 
                this.personListView.SetBinding(ListView.ItemsSourceProperty, new Binding()); 
            }
    
    
    image

    扫码关注公众号,了解更多管理,见识,育儿等内容

    作者: 王德水
    出处:http://www.cnblogs.com/cnblogsfans
    版权:本文版权归作者所有,转载需经作者同意。

  • 相关阅读:
    舒迅:微信商业模式的挑战点
    标签Tag列表的实现
    UITableView下拉更新/上提加载的实现
    一张背景图实现的漂亮黄色CSS菜单
    纯CSS打造漂亮的圆角边界导航
    CSS打造立体按钮式的竖向导航菜单代码
    纯CSS实现蓝色圆角下拉菜单
    用于用户中心或后台左侧的JS折叠菜单
    滑动鼠标放大带阴影的纯CSS菜单
    JavaScript打造超酷很动感的鼠标特效菜单
  • 原文地址:https://www.cnblogs.com/cnblogsfans/p/1958586.html
Copyright © 2011-2022 走看看