第一种方法:自己写的
<Window x:Class="WPFstudy.Window8"
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"
xmlns:local="clr-namespace:WPFstudy"
mc:Ignorable="d"
Title="Window8" Height="450" Width="800">
<!--xmlns:sys="clr-namespace:System;assembly=mscrorlib"-->
<Window.Resources>
<local:UserS x:Key="userSet">
<local:User Name="赵子龙" Age="120"></local:User>
<local:User Name="林黛玉" Age="10"></local:User>
<local:User Name="谢浩然" Age="20"></local:User>
<local:User Name="花木兰" Age="90"></local:User>
<local:User Name="诸葛亮" Age="120"></local:User>
<local:User Name="穆桂英" Age="90"></local:User>
<local:User Name="贾宝玉" Age="20"></local:User>
<local:User Name="李婉童" Age="10"></local:User>
</local:UserS>
</Window.Resources>
<Grid x:Name="grid" >
<Canvas Margin="-10,0,10,0" x:Name="canvas" >
<TextBlock Canvas.Left="121" FontSize="30" TextWrapping="Wrap" Text="Name:" Canvas.Top="187" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<TextBlock Canvas.Left="121" FontSize="30" TextWrapping="Wrap" Text="Age:" Canvas.Top="253" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<TextBox Canvas.Left="393" FontSize="30" TextWrapping="Wrap" Text="{Binding Path=user.Name}" Canvas.Top="197" Width="120" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<TextBox Canvas.Left="393" FontSize="30" TextWrapping="Wrap" Text="{Binding Path=user.Age}" Canvas.Top="253" Width="120" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<TextBlock Canvas.Left="94" FontSize="30" TextWrapping="Wrap" Text="DataSet:" Canvas.Top="83"/>
<ListBox Name="listbox" DisplayMemberPath="Name" ItemsSource="{StaticResource userSet}" Height="100" Width="300" Canvas.Left="276" Canvas.Top="52" HorizontalAlignment="Center" VerticalAlignment="Center" />
<Button Click="first_click" FontSize="30" Content="First" Canvas.Left="154" Canvas.Top="325" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Button Click="last_click" FontSize="30" Content="Last" Canvas.Left="489" Canvas.Top="325" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Button Click="next_click" FontSize="30" Content="Next" Canvas.Left="374" Canvas.Top="325" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Button Click="previo_click" FontSize="30" Content="Previo" Canvas.Left="262" Canvas.Top="325" HorizontalAlignment="Center" VerticalAlignment="Top"/>
</Canvas>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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 WPFstudy
{
/// <summary>
/// Window8.xaml 的交互逻辑
/// </summary>
public partial class Window8 : Window,INotifyPropertyChanged
{
private void Notify(string memberName)
{
if(PropertyChanged!= null)
{
PropertyChanged.Invoke(this,new PropertyChangedEventArgs(memberName));
}
}
private User _user;
public User user
{
get { return _user; }
set { _user = value; Notify("user"); }
}
int curIndex = 0;
public event PropertyChangedEventHandler? PropertyChanged;
public Window8()
{
InitializeComponent();
this.canvas.DataContext = this;
user =((UserS) this.FindResource("userSet"))[curIndex];
listbox.SelectedIndex= curIndex;
listbox.SelectionChanged += Listbox_SelectionChanged;
}
private void Listbox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
curIndex= listbox.SelectedIndex;
user = ((UserS)this.FindResource("userSet"))[curIndex];
}
private void Button_Click(object sender, RoutedEventArgs e)
{
}
private void first_click(object sender, RoutedEventArgs e)
{
curIndex=0;
user = ((UserS)this.FindResource("userSet"))[curIndex];
listbox.SelectedIndex = curIndex;
}
private void last_click(object sender, RoutedEventArgs e)
{
curIndex = ((UserS)this.FindResource("userSet")).Count-1;
user = ((UserS)this.FindResource("userSet"))[curIndex];
listbox.SelectedIndex = curIndex;
}
private void next_click(object sender, RoutedEventArgs e)
{
if(curIndex < ((UserS)this.FindResource("userSet")).Count - 1)
curIndex++;
user = ((UserS)this.FindResource("userSet"))[curIndex];
listbox.SelectedIndex = curIndex;
}
private void previo_click(object sender, RoutedEventArgs e)
{
if(curIndex>0)
curIndex--;
user = ((UserS)this.FindResource("userSet"))[curIndex];
listbox.SelectedIndex = curIndex;
}
}
class UserS:ObservableCollection<User>
{
}
}
public class User:INotifyPropertyChanged
{
private string name;
public string Name
{
get { return name; }
set { name = value; Notify("Name"); }
}
private int age;
public event PropertyChangedEventHandler? PropertyChanged;
protected void Notify(string propName)
{
if(PropertyChanged!=null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
public int Age
{
get { return age; }
set { age = value; Notify("Age"); }
}
public User()
{
}
public User(string name,int age)
{
this.name = name;
this.age= age;
}
}
第二种方法 买的WPF书上写的
<Window x:Class="WPFstudy.Window9"
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"
xmlns:local="clr-namespace:WPFstudy"
mc:Ignorable="d"
Title="Window9" Height="450" Width="800">
<Window.Resources>
<local:UserS x:Key="userSet">
<local:User Name="赵子龙" Age="120"></local:User>
<local:User Name="林黛玉" Age="10"></local:User>
<local:User Name="谢浩然" Age="20"></local:User>
<local:User Name="花木兰" Age="90"></local:User>
<local:User Name="诸葛亮" Age="120"></local:User>
<local:User Name="穆桂英" Age="90"></local:User>
<local:User Name="贾宝玉" Age="20"></local:User>
<local:User Name="李婉童" Age="10"></local:User>
</local:UserS>
</Window.Resources>
<Grid x:Name="grid" >
<Canvas Margin="-10,0,10,0" x:Name="canvas" DataContext="{StaticResource userSet}" >
<TextBlock Canvas.Left="121" FontSize="30" TextWrapping="Wrap" Text="Name:" Canvas.Top="187" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<TextBlock Canvas.Left="121" FontSize="30" TextWrapping="Wrap" Text="Age:" Canvas.Top="253" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<TextBox x:Name="nameTextBox" Canvas.Left="393" FontSize="30" TextWrapping="Wrap" Text="{Binding Path=Name}" Canvas.Top="197" Width="120" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<TextBox x:Name="ageTextBox" Canvas.Left="393" FontSize="30" TextWrapping="Wrap" Text="{Binding Path=Age}" Canvas.Top="253" Width="120" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<TextBlock Canvas.Left="94" FontSize="30" TextWrapping="Wrap" Text="DataSet:" Canvas.Top="83"/>
<ListBox IsSynchronizedWithCurrentItem="True" SelectionChanged="userListBox_SelectionChanged" Name="userListBox" DisplayMemberPath="Name" ItemsSource="{Binding}" Height="100" Width="300" Canvas.Left="276" Canvas.Top="52" HorizontalAlignment="Center" VerticalAlignment="Center" />
<Button Click="first_click" FontSize="30" Content="First" Canvas.Left="154" Canvas.Top="325" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Button Click="last_click" FontSize="30" Content="Last" Canvas.Left="489" Canvas.Top="325" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Button Click="next_click" FontSize="30" Content="Next" Canvas.Left="374" Canvas.Top="325" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Button Click="previo_click" FontSize="30" Content="Previo" Canvas.Left="262" Canvas.Top="325" HorizontalAlignment="Center" VerticalAlignment="Top"/>
</Canvas>
</Grid>
</Window>
<Window x:Class="WPFstudy.Window9"
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"
xmlns:local="clr-namespace:WPFstudy"
mc:Ignorable="d"
Title="Window9" Height="450" Width="800">
<Window.Resources>
<local:UserS x:Key="userSet">
<local:User Name="赵子龙" Age="120"></local:User>
<local:User Name="林黛玉" Age="10"></local:User>
<local:User Name="谢浩然" Age="20"></local:User>
<local:User Name="花木兰" Age="90"></local:User>
<local:User Name="诸葛亮" Age="120"></local:User>
<local:User Name="穆桂英" Age="90"></local:User>
<local:User Name="贾宝玉" Age="20"></local:User>
<local:User Name="李婉童" Age="10"></local:User>
</local:UserS>
</Window.Resources>
<Grid x:Name="grid" >
<Canvas Margin="-10,0,10,0" x:Name="canvas" DataContext="{StaticResource userSet}" >
<TextBlock Canvas.Left="121" FontSize="30" TextWrapping="Wrap" Text="Name:" Canvas.Top="187" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<TextBlock Canvas.Left="121" FontSize="30" TextWrapping="Wrap" Text="Age:" Canvas.Top="253" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<TextBox x:Name="nameTextBox" Canvas.Left="393" FontSize="30" TextWrapping="Wrap" Text="{Binding Path=Name}" Canvas.Top="197" Width="120" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<TextBox x:Name="ageTextBox" Canvas.Left="393" FontSize="30" TextWrapping="Wrap" Text="{Binding Path=Age}" Canvas.Top="253" Width="120" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<TextBlock Canvas.Left="94" FontSize="30" TextWrapping="Wrap" Text="DataSet:" Canvas.Top="83"/>
<ListBox IsSynchronizedWithCurrentItem="True" SelectionChanged="userListBox_SelectionChanged" Name="userListBox" DisplayMemberPath="Name" ItemsSource="{Binding}" Height="100" Width="300" Canvas.Left="276" Canvas.Top="52" HorizontalAlignment="Center" VerticalAlignment="Center" />
<Button Click="first_click" FontSize="30" Content="First" Canvas.Left="154" Canvas.Top="325" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Button Click="last_click" FontSize="30" Content="Last" Canvas.Left="489" Canvas.Top="325" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Button Click="next_click" FontSize="30" Content="Next" Canvas.Left="374" Canvas.Top="325" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<Button Click="previo_click" FontSize="30" Content="Previo" Canvas.Left="262" Canvas.Top="325" HorizontalAlignment="Center" VerticalAlignment="Top"/>
</Canvas>
</Grid>
</Window>
public class User:INotifyPropertyChanged
{
private string name;
public string Name
{
get { return name; }
set { name = value; Notify("Name"); }
}
private int age;
public event PropertyChangedEventHandler? PropertyChanged;
protected void Notify(string propName)
{
if(PropertyChanged!=null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
public int Age
{
get { return age; }
set { age = value; Notify("Age"); }
}
public User()
{
}
public User(string name,int age)
{
this.name = name;
this.age= age;
}
}
总结:虽然都能实现同样功能,但是第二种明显代码简单多了