吉吉于

WPF Study notes(5):Binding

Today,I’ll show you some ways to binding source in WPF.

1.”NO SOURCE”: DataContext

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        x:Class="Lazy_Setter_Trigger.MainWindow"
        xmlns:local="clr-namespace:Lazy_Setter_Trigger"
        Title="Bingding Source" Width="350" Height="340">
    <StackPanel Background="#000" >
        <StackPanel.DataContext>
            <local:Student ID="6" Age="20" Name="Lazynight"/>
        </StackPanel.DataContext>
        <Grid>
            <StackPanel>
                <TextBox Text="{Binding Path=ID}" Margin="5"/>
                <TextBox Text="{Binding Path=Age}" Margin="5"/>
                <TextBox Text="{Binding Path=Name}" Margin="5"/>
            </StackPanel>
        </Grid>
    </StackPanel>
</Window>
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace Lazy_Setter_Trigger
{
	public partial class MainWindow : Window
	{
		public MainWindow()
		{
			this.InitializeComponent();
		}
	}
    public class Student
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

2.”NO Path”

<StackPanel>
        <StackPanel.Resources>
            <sys:String x:Key="lazyString">
                Hello Everybody!
            </sys:String>
        </StackPanel.Resources>
        <TextBlock x:Name="textBlock1" TextWrapping="Wrap" Text="{Binding Path=.,Source={StaticResource ResourceKey=lazyString}}" FontSize="20" Margin="5"/>
        <TextBlock x:Name="textBlock2" TextWrapping="Wrap" Text="{Binding Source={StaticResource ResourceKey=lazyString}}" FontSize="10" Margin="5" />
    </StackPanel>

3.”NO PATH NO SOURCE”

<StackPanel>
        <StackPanel.DataContext>
            <sys:String>
                Lazynight
            </sys:String>
        </StackPanel.DataContext>
        <Grid>
            <StackPanel>
                <TextBlock Text="{Binding}" Margin="5"/>
                <TextBlock Text="{Binding}" Margin="5"/>
                <TextBlock Text="{Binding}" Margin="5"/>
            </StackPanel>
        </Grid>
    </StackPanel>

4.ItemsSource

<StackPanel x:Name="stackPanel" Background="#000">
        <TextBlock Text="Student ID:" Foreground="#ff4040" FontWeight="Bold" Margin="5"/>
        <TextBox x:Name="textBoxId" Margin="5"/>
        <TextBlock Text="Student List:" Foreground="#FF4040" FontWeight="Bold" Margin="5"/>
        <ListBox x:Name="listBoxStudents" Height="110" Margin="5"/>
    </StackPanel>
namespace Lazy_Setter_Trigger
{
	public partial class MainWindow : Window
	{
		public MainWindow()
		{
			this.InitializeComponent();
            List<Student> stuList = new List<Student>()
            {
                new Student(){ID=0,Age=19,Name="Lazynight"},
                new Student(){ID=1,Age=20,Name="Flowerowl"},
                new Student(){ID=2,Age=21,Name="NightDivides"},
                new Student(){ID=3,Age=22,Name="Sinking ship"}
            };
            this.listBoxStudents.ItemsSource = stuList;
            this.listBoxStudents.DisplayMemberPath = "Name";
            Binding binding = new Binding("SelectedItem.ID") { Source=this.listBoxStudents};
            this.textBoxId.SetBinding(TextBox.TextProperty,binding);
		}
	}
    public class Student
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

<StackPanel x:Name="stackPanel" Background="#000">
        <TextBlock Text="Student ID:" Foreground="#ff4040" FontWeight="Bold" Margin="5"/>
        <TextBox x:Name="textBoxId" Margin="5"/>
        <TextBlock Text="Student List:" Foreground="#FF4040" FontWeight="Bold" Margin="5"/>
        <ListBox x:Name="listBoxStudents" Height="110" Margin="5">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Path=ID}" Width="30"/>
                        <TextBlock Text="{Binding Path=Age}" Width="30"/>
                        <TextBlock Text="{Binding Path=Name}" Width="70"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </StackPanel>

 5.LINQ

<StackPanel x:Name="stackPanel" Background="#000">
        <ListView x:Name="listViewStudent" Height="150" Margin="5">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="ID" Width="60" DisplayMemberBinding="{Binding ID}"/>
                    <GridViewColumn Header="Age" Width="60" DisplayMemberBinding="{Binding Age}"/>
                    <GridViewColumn Header="Name" Width="60" DisplayMemberBinding="{Binding Name}"/>
                </GridView>
            </ListView.View>
        </ListView>
    </StackPanel>

 

using System.Linq;
namespace Lazy_Setter_Trigger
{
	public partial class MainWindow : Window
	{
		public MainWindow()
		{
			this.InitializeComponent();
            List<Student> stuList = new List<Student>() 
            {
                new Student(){ID=0,Age=19,Name="Lazynight"},
                new Student(){ID=1,Age=20,Name="Flowerowl"},
                new Student(){ID=2,Age=21,Name="NightDivides"},
                new Student(){ID=3,Age=22,Name="Sinking ship"}
            };
            this.listViewStudent.ItemsSource = from stu in stuList where stu.Name.StartsWith("L") select stu; 
		}
	}
    public class Student
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

 6.ADO.NET

7.XML

<StackPanel x:Name="stackPanel" Background="#000">
        <ListView x:Name="listViewStudent" Height="150" Margin="5">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="ID" Width="60" DisplayMemberBinding="{Binding XPath=@ID}"/>
                    <GridViewColumn Header="Age" Width="60" DisplayMemberBinding="{Binding XPath=Age}"/>
                    <GridViewColumn Header="Name" Width="60" DisplayMemberBinding="{Binding XPath=Name}"/>
                </GridView>
            </ListView.View>
        </ListView>
        <Button Content="Load" Click="Button_Click" Height="25" Margin="5"/>
    </StackPanel>
<?xml version="1.0" encoding="utf-8"?>
<StudentList>
	<Student ID="1">
		<Name>Lazynight</Name>
	</Student>
	<Student ID="2">
		<Name>Flowerowl</Name>
	</Student>
	<Student ID="3">
		<Name>Frozen World</Name>
	</Student>
	<Student ID="4">
		<Name>Sinking Ship</Name>
	</Student>
	<Student ID="5">
		<Name>Orange</Name>
	</Student>
</StudentList>
private void Button_Click(object sender, RoutedEventArgs e)
        {
            XmlDataDocument doc = new XmlDataDocument();
            doc.Load(AppDomain.CurrentDomain.BaseDirectory+"Data.xml");
            XmlDataProvider xdp = new XmlDataProvider();
            xdp.Document = doc;
            xdp.XPath = @"/StudentList/Student";
            this.listViewStudent.DataContext = xdp;
            this.listViewStudent.SetBinding(ListView.ItemsSourceProperty,new Binding());
        }

 

 

转载请注明:于哲的博客 » WPF Study notes(5):Binding