wpf学习-根据绑定数据有条件地改变元素的属性
2014-10-31 16:16
337 查看
案例目的
案例是根据产品的价格的大小来设置显示价格控件TextBox的背景颜色数据模型
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DataBinding { class Products { public int ProductID { get; set; } public int CategoryID{ get; set; } public String ModelNumber{ get; set; } public String ModelName{ get; set; } public String ProductImageName{ get; set; } public double UnitCost { get; set; } public String Description { get; set; } public Products() { } public Products(int _ProductID, int _CategoryID, String _ModelNumber, String _ModelName, String _ProductImageName, double _UnitCost, String _Description) { ProductID = _ProductID; CategoryID = _CategoryID; ModelNumber = _ModelNumber; ModelName = _ModelName; ProductImageName = _ProductImageName; UnitCost = _UnitCost; Description = _Description; } } class Categories { public int CategoryID { get; set; } public string CategoryName { get; set; } public Categories() { } public Categories(int _CategoryID, string _CategoryName) { CategoryID = _CategoryID; CategoryName = _CategoryName; } } }
数据源模型
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DataBinding { class ProductsDao { List<Products> productList = new List<Products>(); public ProductsDao(){ InitProducts(); } private void InitProducts() { Categories category1 = new Categories(1, "水果"); Categories category2 = new Categories(2, "干果"); Categories category3 = new Categories(3, "小吃"); Products product1 = new Products(1, 1, "modelNumber1", "modelName1", "./",1.1, "好1"); Products product2 = new Products(2, 1, "modelNumber2", "modelName2", "./", 1.2, "好2"); Products product3 = new Products(3, 2, "modelNumber3", "modelName3", "./", 1.3, "好3"); Products product4 = new Products(4, 2, "modelNumber4", "modelName4", "./", 1.4, "好4"); Products product5 = new Products(5, 3, "modelNumber5", "modelName5", "./", 1.5, "好5"); Products product6 = new Products(6, 3, "modelNumber6", "modelName6", "./", 1.6, "好6"); Products product7 = new Products(7, 3, "modelNumber7", "modelName7", "./", 1.7, "好7"); productList.Add(product1); productList.Add(product2); productList.Add(product3); productList.Add(product4); productList.Add(product5); productList.Add(product6); productList.Add(product7); } public Products GetProductByID(int ID) { return productList[ID]; } public List<Products> GetAllProducts() { return productList; } } }
转换模型:当price 的值大于MinimumPriceToHighLight时,改变背景颜色
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Data; using System.Windows.Media; namespace DataBinding { class PriceToBackgroundConverter:IValueConverter { public Brush DefaultBrush { get; set; } public Brush HighLightBrush { get; set; } public double MinimumPriceToHighLight { get; set; } public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { double price = (double)value; if (price > MinimumPriceToHighLight) { return HighLightBrush; } else { return DefaultBrush; } } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } }
xmal布局文件
<Window x:Class="DataBinding.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:DataBinding" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <local:PriceConverter x:Key="priceConverter"></local:PriceConverter> <local:PriceToBackgroundConverter x:Key="priceToBackgroundConverter" MinimumPriceToHighLight="1.4" DefaultBrush="{x:Null}" HighLightBrush="Red"></local:PriceToBackgroundConverter> </Window.Resources> <Grid Background="LightBlue"> <Grid.ColumnDefinitions> <ColumnDefinition Width="1*"></ColumnDefinition> <ColumnDefinition Width="2*"></ColumnDefinition> </Grid.ColumnDefinitions> <ListBox x:Name="productList" DisplayMemberPath="ModelName"></ListBox> <StackPanel Grid.Column="1" DataContext="{Binding ElementName=productList, Path=SelectedItem}"> <StackPanel Orientation="Horizontal"> <TextBlock Text="Model Number :" Margin="5"></TextBlock> <TextBox Margin="5" Width="200" Text="{Binding Path=ModelNumber}"></TextBox> </StackPanel> <StackPanel Orientation="Horizontal"> <TextBlock Text="Model Name :" Margin="5"></TextBlock> <TextBox Margin="5" Width="200" Text="{Binding Path=ModelName}"></TextBox> </StackPanel> <StackPanel Orientation="Horizontal"> <TextBlock Text="Unit Cost :" Margin="5"></TextBlock> <TextBox Margin="5" Width="200" Background="{Binding Path=UnitCost, Converter={StaticResource priceToBackgroundConverter}}" Text="{Binding Path=UnitCost, Converter={StaticResource priceConverter}}"></TextBox> </StackPanel> <TextBlock Text="Description :" Margin="5"> </TextBlock> <TextBox Margin="5,5,10,5" MinHeight="140" Text="{Binding Path=Description}"></TextBox> </StackPanel> </Grid> </Window>
xaml隐藏代码
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; namespace DataBinding { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); init(); } private void init() { ProductsDao dao = new ProductsDao (); productList.ItemsSource = dao.GetAllProducts(); } } }
结果演示
相关文章推荐
- WPF学习笔记一 依赖属性及其数据绑定
- WPF——数据绑定及属性改变事件
- WPF 数据绑定 1_1 基础知识&绑定到元素属性
- WPF学习笔记(一):数据绑定之元素到元素绑定
- WPF依赖属性(续)(4)依赖属性与数据绑定
- 学习WPF: 创建数据绑定目录树
- WPF学习笔记 - 数据绑定(在代码中)
- ASP.Net控件模板中根据绑定对象的属性控制元素隐现技巧
- WPF学习(1):控件之间的数据绑定
- WPF学习系列005: 2.4 属性元素
- WPF绑定各种数据源之元素控件属性
- wpf学习笔记-数据绑定功能总结
- WPF学习之数据绑定
- WPF 学习笔记-设置属性使窗口不可改变大小
- 【转载】wpf学习笔记数据绑定8
- WPF学习之数据绑定
- WPF and Silverlight 学习笔记(二十五):使用CollectionView实现对绑定数据的排序、筛选、分组
- WPF and Silverlight 学习笔记(二十二):使用代码实现绑定、绑定数据的验证
- WPF and Silverlight 学习笔记(二十):WPF数据绑定概述
- WPF的xaml中导入其他命名空间以及绑定类属性数据