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=,CategoryName="Beverages",Description="Soft drinks, coffees, teas, beers, and ales"},
new Categories{ CategoryID=,CategoryName="Condiments",Description="Sweet and savory sauces, relishes, spreads, and seasonings"},
new Categories{ CategoryID=,CategoryName="Confections",Description="Desserts, candies, and sweet breads"},
new Categories{ CategoryID=,CategoryName="Dairy Products",Description="Cheeses"},
new Categories{ CategoryID=,CategoryName="Grains/Cereals",Description="Breads, crackers, pasta, and cereal"},
new Categories{ CategoryID=,CategoryName="Meat/Poultry",Description="Prepared meats"},
new Categories{ CategoryID=,CategoryName="Produce",Description="Dried fruit and bean curd"},
new Categories{ CategoryID= ,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=,ProductName="Chai",UnitPrice=18.00,CategoryID=},
new Product{ProductID=,ProductName="Aniseed Syrup",UnitPrice=10.00,CategoryID=},
new Product{ProductID=,ProductName="Teatime Chocolate Biscuits", UnitPrice=18.00,CategoryID=},
new Product{ProductID=,ProductName="Raclette Courdavault", UnitPrice=, CategoryID=},
new Product{ProductID=,ProductName="Ravioli Angelo", UnitPrice=,CategoryID=},
};
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 > - && 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改变:
wpf中ListBox的选中项与ComboBox间的绑定的更多相关文章
- WPF中ListBox的项ListBoxItem被选中的时候Background变化
使用WPF 中ListBox,点击ListBoxItem的时候,自定义它的背景色,曾经在网上找了一些方法, 不是很理想,后来在StackOverflow上找到了,贴出代码和效果图: 效果图:
- WPF中ListBox滚动时的缓动效果
原文:WPF中ListBox滚动时的缓动效果 上周工作中遇到的问题: 常规的ListBox在滚动时总是一格格的移动,感觉上很生硬. 所以想要实现类似Flash中的那种缓动的效果,使ListBox滚动时 ...
- Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)
原文:Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定) ------------------------------ ...
- WPF中实现多选ComboBox控件
在WPF中实现带CheckBox的ComboBox控件,让ComboBox控件可以支持多选. 将ComboBox的ItemsSource属性Binding到一个Book的集合, public clas ...
- WPF学习笔记:获取ListBox的选中项
有代码有J8: UI <UserControl x:Class="UnitViews.UserListUV" xmlns="http://schemas.micro ...
- 转:WPF中ListBox的创建和多种绑定用法
先从最容易的开始演示ListBox控件的创建. Adding ListBox Items下面的代码是向ListBox控件中添加多项ListBoxItem集合.XAML代码如下:<ListBox ...
- WPF中ListBox /ListView如何改变选中条背景颜色
适用ListBox /ListView WPF中LISTVIEW如何改变选中条背景颜色 https://www.cnblogs.com/sjqq/p/7828119.html
- WPF中ListBox的绑定
WPF中列表式控件派生自ItemsControl类,继承了ItemsSource属性.ItemsSource属性可以接收一个IEnumerable接口派生类的实例作为自己的值(所有可被迭代遍历的集合都 ...
- 在WPF中使用变通方法实现枚举类型的XAML绑定
问题缘起 WPF的分层结构为编程带来了极大便利,XAML绑定是其最主要的特征.在使用绑定的过程中,大家都普遍的发现枚举成员的绑定是个问题.一般来说,枚举绑定多出现于与ComboBox配合的情况,此时我 ...
随机推荐
- 1.rs.first()、rs.last()、rs.next()、rs.getRow()
rs.first()获取第一条数据的信息rs.last()获取最后一条数据的信息rs.next()获取下一条数据的信息rs.getRow()获取当前信息的行数 import java.sql.*; p ...
- Arrays.toString(a)--->将数组a的值转换为字符串
Arrays.toString(数组)是java内置类Arrays类的一个方法,具体查Api可知.因为数组是不可直接输出的,它的作用是将数组转换为字符串.其实用for循环也是可以做到的,只不过比for ...
- C#的面向对象
一.面向对象编程(OOP)是将现实中的事物抽象花,其设计的重点就是类的设计. 二.类是面向对象编程的设计核心,实际上是一种复杂的数据类型.将不同类型的数据和与这些数据就相关的操作封装在一起,就构成类. ...
- hdu_5354_Bipartite Graph(cdq分治+并查集判二分图)
题目链接:hdu_5354_Bipartite Graph 题意: 给你一个由无向边连接的图,问对于每一个点来说,如果删除这个点,剩下的点能不能构成一个二分图. 题解: 如果每次排除一个点然后去DFS ...
- MongoDB文档基本操作
一.插入文档 使用insert()或save()方法向集合插入文档 >db.COLLECTION_NAME.insert(document) 详细用法可以参考MongoDB菜鸟教程 二.查找文档 ...
- Spring声明式事务配置中propagation各个值的意思
值 含义 REQUIRED 支持当前事务,如果当前没有事务,就新建一个事务. SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行. MANDATORY 支持当前事务,如果当前没有事务 ...
- CentOS系统使用配置文件修改IP地址详细教程
在VM虚拟机安装的centos系统,默认使用的是dhcp自动获取ip地址的方式,而我自己想用这个centos在局域网内搭建一个小型演示站点,这个自动获取ip地址的方式就明显不好了,那么centos如何 ...
- MAC img 安装 mysql 修改密码
参考 : http://tieba.baidu.com/p/3042628829 step1: 苹果->系统偏好设置->最下边点mysql 在弹出页面中 关闭mysql服务(点击stop ...
- "urllib"库的学习
在习题—41遇到这个模块/库, 有兴趣的参考下面这个网址: http://blog.sina.com.cn/s/blog_b369b20d0101kb7m.html # coding: utf-8 i ...
- 利用pscp命令实现linux与windows文件互传
windows==>linux(单个文件) PrivateKey.ppk(私钥)可以是相对路径或者绝对路径pscp -i D:\PrivateKey.ppk D:\xxx.xx root@123 ...