c 新手一个人做网站,江苏省住房建设厅网站,做网站一定要psd吗,wordpress商城主题个人中心我们先来看看微软官方给出的定语#xff1a;提供将自定义逻辑应用于绑定的方法#xff0c;我们来看一下该接口的定义#xff0c;Convert提供了将数据源到UI的格式化#xff0c;ConvertBack表示反向namespace System.Windows.Data
{//// Summary:// Provides a way to a…我们先来看看微软官方给出的定语提供将自定义逻辑应用于绑定的方法我们来看一下该接口的定义Convert提供了将数据源到UI的格式化ConvertBack表示反向namespace System.Windows.Data
{//// Summary:// Provides a way to apply custom logic to a binding.public interface IValueConverter{object Convert(object value, Type targetType, object parameter, CultureInfo culture);object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture);}
}我们做一个简单的例子实现商品列表的绑定定义一个DecimalConverter数据转化接口来实现一个价格的格式化我们将价格格式化成两位小数using System;
using System.Collections.Generic;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
using System.Windows.Media;
namespace Example_17
{/// summary/// Interaction logic for MainWindow.xaml/// /summarypublic partial class MainWindow : Window{public MainWindow(){InitializeComponent();this.Loaded MainWindow_Loaded;}private void MainWindow_Loaded(object sender, RoutedEventArgs e){ListOrder orders new ListOrder();Order order new Order();order.Merchindise IPhone 14;order.Quantity 1;order.Price 8000;orders.Add(order);order new Order();order.Merchindise 卫生纸;order.Quantity 10;order.Price 28.7895M;orders.Add(order);order new Order();order.Merchindise 笔记本;order.Quantity 10;order.Price 87.7895M;orders.Add(order);this.lstOrder.ItemsSource orders;}}[ValueConversion(typeof(decimal), typeof(string))]public class DecimalConverter : IValueConverter{public object? Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){if (value ! null)return ((decimal)value).ToString(f2);elsereturn null;}public object? ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture){return null;}}public class Order{public string Merchindise { get; set; } null!;public int Quantity { get; set; }public decimal Price { get; set; }}
}Window x:ClassExample_17.MainWindowxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006xmlns:localclr-namespace:Example_17mc:Ignorabled TitleMainWindow Height450 Width800Window.Resourceslocal:DecimalConverter x:KeymyDecimalConverter/local:DecimalConverter/Window.ResourcesStackPanel x:UidstaOrderListView x:UidlstOrder IsSynchronizedWithCurrentItemTrue ScrollViewer.CanContentScrollTrue x:NamelstOrder AllowDropTrue BorderThickness0,0,0,1 FocusableFalseListView.ViewGridView x:UidGridView_1GridViewColumn x:NamecolMerchindise x:UidGridViewColumn_1 Header商品名称 Width250GridViewColumn.CellTemplateDataTemplateBorder Width138 HeightAutoGrid x:UidGrid_2 HeightAuto WidthAutoTextBlock x:UidTextBlock_2 Margin0,0,0,0 HorizontalAlignmentLeft VerticalAlignmentStretch Text{Binding PathMerchindise} FontFamilyArial FontWeightBold FontSize15 TextWrappingNoWrap TextTrimmingWordEllipsis //Grid/Border/DataTemplate/GridViewColumn.CellTemplate/GridViewColumnGridViewColumn x:NamecolQuantity x:UidGridViewColumn_2 Header数量 Width170 GridViewColumn.CellTemplateDataTemplateBorder Width56 HeightAutoGrid x:UidGrid_3 HeightAuto WidthAutoTextBlock x:UidTextBlock_3 Margin0,0,0,0 Text{Binding PathQuantity} HorizontalAlignmentRight VerticalAlignmentCenter FontFamilyArial FontWeightBold FontSize15 Background{x:Null} TextTrimmingWordEllipsis //Grid/Border/DataTemplate/GridViewColumn.CellTemplate/GridViewColumnGridViewColumn x:NamecolPrice x:UidGridViewColumn_3 Header价格 Width170GridViewColumn.CellTemplateDataTemplateGrid x:UidGrid_4 HeightAuto WidthAutoTextBlock x:UidTextBlock_4 HorizontalAlignmentRight VerticalAlignmentCenter Margin0,0,0,0 FontFamilyArial FontWeightBold FontSize15 TextTrimmingWordEllipsis FontStretchNormal TextBlock.TextBinding PathPrice Converter{StaticResource myDecimalConverter}//TextBlock.Text/TextBlock/Grid/DataTemplate/GridViewColumn.CellTemplate/GridViewColumn/GridView/ListView.View/ListView/StackPanel
/Window运行效果如下我们可以看到我们的价格已经被格式化我们如果想将数量等于10的背景颜色设置为绿色又该怎么做的同样的我们定义一个ColorConverter转换器[ValueConversion(typeof(int), typeof(SolidColorBrush))]public class ColorConverter : IValueConverter{public object? Convert(object value, Type targetType, object parameter, CultureInfo culture){if ((int)value 10)return new SolidColorBrush(Colors.Green); ;return null;}public object? ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){return null;}}同样我们在XAML中引用一下该对象local:ColorConverter x:KeymyColorConverter/local:ColorConverter在ListView中添加如下样式ListView.ItemContainerStyleStyle x:UidStyle_2 TargetType{x:Type ListViewItem}Setter PropertyBackground Value{Binding PathQuantity, Converter{StaticResource myColorConverter}}/Setter/Style
/ListView.ItemContainerStyle运行效果如下从上面例子可以看出我们可以利用IValueConverter接口在数据源和UI之间做一些数据转换另外微软还提供了一个IMultiValueConverter接口支持多个值转换我们这里就不说了感兴趣的小朋友可以研究一下。