• wpf中ListBox的选中项与ComboBox间的绑定


    产品类:

    public  class Product:NotificationObject
        {
            private int productID;
    
            public int ProductID
            {
                get { return productID; }
                set { productID = value;
                this.RaisePropertyChanged(()=>this.ProductID);
                }
            }
    
            private string productName;
    
            public string ProductName
            {
                get { return productName; }
                set { productName = value;
                RaisePropertyChanged(()=>this.ProductName);
                }
            }
    
            private double unitPrice;
    
            public double UnitPrice
            {
                get { return unitPrice; }
                set { unitPrice = value;
                this.RaisePropertyChanged(()=>this.UnitPrice);
                }
            }
    
            private int categoryID;
    
            public int CategoryID
            {
                get { return categoryID; }
                set { categoryID = value;
                RaisePropertyChanged(()=>this.CategoryID);
                }
            }
            
        }

    引用了Microsoft.Practices.Prism.dll,Using了Microsoft.Practices.Prism.ViewModel名称空间,继承NotificationObject类实现更改通知

    产品分类的类:

     public class Categories:NotificationObject
        {
            private int categoryID;
    
            public int CategoryID
            {
                get { return categoryID; }
                set 
                { 
                    categoryID = value;
                    this.RaisePropertyChanged(()=>this.CategoryID);
                }
            }
    
            private string categoryName;
    
            public string CategoryName
            {
                get { return categoryName; }
                set { categoryName = value;
                this.RaisePropertyChanged(()=>this.CategoryName);
                }
            }
    
            private string description;
    
            public string Description
            {
                get { return description; }
                set { description = value;
                this.RaisePropertyChanged(()=>this.Description);
                }
            }
            
        }

    后台代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    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.Navigation;
    using System.Windows.Shapes;
    using System.Collections.ObjectModel;
    using BingingComboBox.Models;
    using System.ComponentModel;
    
    namespace BingingComboBox
    {
    
    
        /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window, INotifyPropertyChanged
        {
            //实现INotifyPropertyChanged接口(更改通知)
            public event PropertyChangedEventHandler PropertyChanged;
            public void RaisePropertyChanged(string propName)
            {
                if (this.PropertyChanged != null)
                {
                    this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propName));
                }
            }
    
            private Product selectedProduct;
            //listBox选中项
            public Product SelectedProduct
            {
                get { return selectedProduct; }
                set { selectedProduct = value;
                RaisePropertyChanged("SelectedProduct");
                }
            }
            
           //产品类别集合初始化
           private ObservableCollection<Categories>  categoryList = new ObservableCollection<Categories> 
                {
                    new Categories{ CategoryID=1,CategoryName="Beverages",Description="Soft drinks, coffees, teas, beers, and ales"},
                    new Categories{ CategoryID=2,CategoryName="Condiments",Description="Sweet and savory sauces, relishes, spreads, and seasonings"},
                    new Categories{ CategoryID=3,CategoryName="Confections",Description="Desserts, candies, and sweet breads"},
                    new Categories{ CategoryID=4,CategoryName="Dairy Products",Description="Cheeses"},
                    new Categories{ CategoryID=5,CategoryName="Grains/Cereals",Description="Breads, crackers, pasta, and cereal"},
                    new Categories{ CategoryID=6,CategoryName="Meat/Poultry",Description="Prepared meats"},
                    new Categories{ CategoryID=7,CategoryName="Produce",Description="Dried fruit and bean curd"},
                    new Categories{ CategoryID= 8,CategoryName="Seafood",Description="Seaweed and fish"}
                }; 
        
             private ObservableCollection<Product>  productListList;
            /// <summary>
            /// 产品集合
            /// </summary>
            public ObservableCollection<Product>  ProductList
            {
                get
                {
                    if (productListList == null)
                    {
                        productListList = new ObservableCollection<Product>();
                    }
                    return productListList;
                }
                set 
                { 
                    productListList = value;
                }
            }   
     
            public MainWindow()
            {
                InitializeComponent();
               
                CollectionViewSource categoriesTypeViewSource = (CollectionViewSource)this.FindResource("categoriesTypeViewSource");
                categoriesTypeViewSource.Source = categoryList;//用于绑定产品类别的ComboBox的ItemSource
    CollectionViewSource productsViewSource = (CollectionViewSource)this.FindResource("productsViewSource"); productsViewSource.Source = GetProducts();//用于绑定产品列表ListBox的ItemSource } /// <summary> /// 返回产品列表 /// </summary> /// <returns></returns> public ObservableCollection<Product> GetProducts() { ObservableCollection<Product> productList = new ObservableCollection<Product>() { new Product{ProductID=1,ProductName="Chai",UnitPrice=18.00,CategoryID=1}, new Product{ProductID=2,ProductName="Aniseed Syrup",UnitPrice=10.00,CategoryID=2}, new Product{ProductID=3,ProductName="Teatime Chocolate Biscuits", UnitPrice=18.00,CategoryID=3}, new Product{ProductID=4,ProductName="Raclette Courdavault", UnitPrice=25, CategoryID=4}, new Product{ProductID=5,ProductName="Ravioli Angelo", UnitPrice=55,CategoryID=5}, }; return productList; } /// <summary> /// 弹出框显示产品列表选中项(产品)的信息,用来验证下拉产品分类comboBox, /// 更改产品分类时,产品列表选中项的产品分类id是否改变 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Button_Click(object sender, RoutedEventArgs e) { if (lbProducts.SelectedIndex > -1 && lbProducts.SelectedItem != null) { Product p = lbProducts.SelectedItem as Product; string msg = string.Format("选中的产品{0}:的单价为{1},类别id为:{2}", p.ProductName, p.UnitPrice, p.CategoryID); MessageBox.Show(msg); } } } }



    XAML:

    <Window x:Class="BingingComboBox.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525" DataContext="{Binding RelativeSource={RelativeSource Self}}">
        <Window.Resources>
            <CollectionViewSource x:Key="categoriesTypeViewSource"/>
            <CollectionViewSource x:Key="productsViewSource"/>
        </Window.Resources>
        <Grid>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <ListBox x:Name="lbProducts" SelectedItem="{Binding Path=SelectedProduct, Mode= TwoWay, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding Source={StaticResource ResourceKey=productsViewSource}}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=ProductName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
                <Grid Grid.Column="1" DataContext="{Binding  Path=SelectedProduct, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="产品名称:"/>
                    <TextBox Grid.Column="1" Text="{Binding Path=ProductName}"/>
                    <TextBlock Grid.Row="1" Text="产品类别:"/>
                    <ComboBox Grid.Row="1" Grid.Column="1" 
                              ItemsSource="{Binding Source={StaticResource ResourceKey=categoriesTypeViewSource}}"
                              DisplayMemberPath="CategoryName"  
                              SelectedValuePath="CategoryID" 
                              SelectedValue="{Binding Path=CategoryID,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                          />
                    <TextBlock Grid.Row="2" Text="产品单价:"/>
                    <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Path=UnitPrice}"/>
                    <Button Grid.Row="3" Grid.Column="1"  Content="Show" Click="Button_Click"/>
                </Grid>
            </Grid>
        </Grid>
    </Window>


    运行效果:

    点击“Show”按钮,show出初始值:

    下拉产品分类下拉框ComboBox:

    点击“Show”按钮,弹出修改后的信息,产品分类id改变:

  • 相关阅读:
    NanUI for Winform发布,让Winform界面设计拥有无限可能
    使用Nginx反向代理 让IIS和Tomcat等多个站点一起飞
    jQuery功能强大的图片查看器插件
    Entity Framework 5.0 Code First全面学习
    封装EF code first用存储过程的分页方法
    NET中使用Redis (二)
    Redis学习笔记~Redis主从服务器,读写分离
    ID3算法
    定性归纳(1)
    js加密
  • 原文地址:https://www.cnblogs.com/527289276qq/p/4357428.html
Copyright © 2020-2023  润新知