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配合的情况,此时我 ...
随机推荐
- PHP命名空间(Namespace)的使用详解
对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...
- html5权威指南:标记文字
html5权威指南-第八章-用基本的文字元素标记内容 :http://www.cnblogs.com/yc-755909659/archive/2016/10/02/5928122.html html ...
- Tomcat 配置支持APR
对ARP支持,需要安装以下库: APR library JNI wrappers for APR used by Tomcat (libtcnative) OpenSSL libraries 其中JN ...
- 【Python】生成器和递归
l=[1, 2, 3, 4, 5, 6] 如果l求和,毫无疑问可以使用递归,比如可以这样: def sum(l): res = 0 for i in l: if not isinstance(i, l ...
- POJ 2234 Matches Game(取火柴博弈1)
传送门 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...
- Infix to postfix 用stack模板,表达式没有括号
#include<stack> #include<iostream> #include<string> using namespace std; //优先级判断 c ...
- ESFramework 4.0 快速上手(01) -- Rapid引擎
(在阅读该文之前,请先阅读 ESFramework 4.0 概述 ,会对本文的理解更有帮助.) ESFramework/ESPlatform 4.0 的终极目标是为百万级的用户同时在线提供支持,因为强 ...
- OMCS开发手册(03) -- 多媒体服务器
前面我们已经详细介绍了基于OMCS开发网络多媒体应用的客户端程序所必需掌握的内容,现在我们来看一下OMCS服务端的开发.对于使用者而言,OMCS的服务端就非常简单了,只要实现一个用户验证的接口,挂接到 ...
- Vultr免费vps注册和使用简易教程
如果你是站长,寻找托管网站的主机,或者是开发者,需要搭建服务器环境,选购vps是必须的.强烈不推荐国内的vps产品,没有性价比,维护水平又烂,甚至某些国内所谓云主机vps安装后门,监控你的数据.海外v ...
- C# 二维数组和集合
本次课我主要学习了二维数组和集合的部分内容. 在二维数组的部分中,我主要学习了二维数组的定义方法:int [,] array=new int [4,2];做了一个小练习:用二维数组打印自己的姓氏. s ...