产品类:

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间的绑定的更多相关文章

  1. WPF中ListBox的项ListBoxItem被选中的时候Background变化

    使用WPF 中ListBox,点击ListBoxItem的时候,自定义它的背景色,曾经在网上找了一些方法, 不是很理想,后来在StackOverflow上找到了,贴出代码和效果图: 效果图:

  2. WPF中ListBox滚动时的缓动效果

    原文:WPF中ListBox滚动时的缓动效果 上周工作中遇到的问题: 常规的ListBox在滚动时总是一格格的移动,感觉上很生硬. 所以想要实现类似Flash中的那种缓动的效果,使ListBox滚动时 ...

  3. Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)

    原文:Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定) ------------------------------ ...

  4. WPF中实现多选ComboBox控件

    在WPF中实现带CheckBox的ComboBox控件,让ComboBox控件可以支持多选. 将ComboBox的ItemsSource属性Binding到一个Book的集合, public clas ...

  5. WPF学习笔记:获取ListBox的选中项

    有代码有J8: UI <UserControl x:Class="UnitViews.UserListUV" xmlns="http://schemas.micro ...

  6. 转:WPF中ListBox的创建和多种绑定用法

    先从最容易的开始演示ListBox控件的创建. Adding ListBox Items下面的代码是向ListBox控件中添加多项ListBoxItem集合.XAML代码如下:<ListBox ...

  7. WPF中ListBox /ListView如何改变选中条背景颜色

    适用ListBox /ListView WPF中LISTVIEW如何改变选中条背景颜色 https://www.cnblogs.com/sjqq/p/7828119.html

  8. WPF中ListBox的绑定

    WPF中列表式控件派生自ItemsControl类,继承了ItemsSource属性.ItemsSource属性可以接收一个IEnumerable接口派生类的实例作为自己的值(所有可被迭代遍历的集合都 ...

  9. 在WPF中使用变通方法实现枚举类型的XAML绑定

    问题缘起 WPF的分层结构为编程带来了极大便利,XAML绑定是其最主要的特征.在使用绑定的过程中,大家都普遍的发现枚举成员的绑定是个问题.一般来说,枚举绑定多出现于与ComboBox配合的情况,此时我 ...

随机推荐

  1. Sass编译Css

    1.我新建了一个项目工程 2.路径在 3.编译 sass 要编译的sass文件名.scss ../存放编译后的css目录/编译后的css名称.css 4.刷新项目,就编译出来了 6.当然,你要嫌麻烦的 ...

  2. Markdown - Github specific

    这篇文章的内容,必须到github的页面才能全部生效. Github specific Github allows for mistakes There are also Tables in gith ...

  3. json解析的函数eval_r() 和 JSON.parse()

              eval_r()解析的字符串格式是'({"data":"hello","num":"5"})'   ...

  4. 6.Hibernate单向的多对一 关联映射

    1.创建如下项目结构 2.在项目的src下创建hibernate.cfg.xml主配置文件 <?xml version="1.0" encoding="UTF-8& ...

  5. 对于Netty的十一个疑问

    [说明]本文原载于码农 IO(manong.io)官方微信 developerWorks,转载.引用请注明出处及作者. 1.Netty 是什么? Netty 是一个基于 JAVA NIO 类库的异步通 ...

  6. jquery.cookie.js 的配置

    一个轻量级的cookie 插件,可以读取.写入.删除 cookie. jquery.cookie.js 的配置 首先包含jQuery的库文件,在后面包含 jquery.cookie.js 的库文件. ...

  7. css3动画 9步

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 一些常见warning的原因和解决方法

    在入职三周后,终于赶齐了接手项目落下两个月的项目,有了一些自己的空闲时间对项目进行整理.主要整理包括类目的整合,从原来一个系统文件夹下几百个文件整改为以MVC设计思想为原则的分文件夹整理类目,井然有序 ...

  9. OSI参考模型各层的主要功能

    OSI参考模型将整个通信功能划分为7个层次,其划分的主要原则是: 1网络中各主机有相同的层次 2 不同主机的同等层具有相同的功能 3同一主机内相邻层之间通过接口通信 4 每层可以使用下层提供的服务,并 ...

  10. HDU1007--Quoit Design(平面最近点对)

    Problem Description Have you ever played quoit in a playground? Quoit is a game in which flat rings ...