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

案例目的

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

结果演示


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值