wpf学习-根据绑定数据有条件地改变元素的属性

来源:互联网 发布:赛门铁克备份软件 编辑:程序博客网 时间:2024/06/08 10:54

案例目的

     案例是根据产品的价格的大小来设置显示价格控件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();        }    }}

结果演示


0 0