WPF 实现ListBox与 下面的TextBox控件同步的功能 ,两种方法

在这里插入图片描述

第一种方法:自己写的

<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;
        }
      
    }

总结:虽然都能实现同样功能,但是第二种明显代码简单多了

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值