WPF ObjectDataProvider学习(一)

时间:2021-07-27
本文章向大家介绍WPF ObjectDataProvider学习(一),主要包括WPF ObjectDataProvider学习(一)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.data.objectdataprovider?view=net-5.0

ObjectDataProvider 提供了一种简便的方法,可在 XAML 中创建对象并将对象用作绑定源对象,但不会替换现有的数据模型

使用 ObjectDataProvider

准备一个枚举类

 1 public enum EWeekDay
 2     {
 3         星期一,
 4 
 5         星期二,
 6 
 7         星期三,
 8 
 9         星期四,
10 
11         星期五,
12 
13         星期六,
14 
15         星期天,
16     }

准备一个颜色转换器

 1  public class Converter : IValueConverter
 2     {
 3         public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
 4         {
 5             PropertyInfo propertyInfo = (PropertyInfo)value;//从这里也可以看出 ObjectDataProvider就是使用的反射机制
 6             var str = propertyInfo.GetValue(value).ToString();
 7             var color = (Color)ColorConverter.ConvertFromString(str);
 8             var brush = new SolidColorBrush(color);
 9             return brush;
10         }
11 
12         public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
13         {
14             throw new NotImplementedException();
15         }
16     }

界面

 1 <Window
 2     x:Class="ObjectDataProvider绑定到方法.MainWindow"
 3     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 4     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 5     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 6     xmlns:local="clr-namespace:ObjectDataProvider绑定到方法"
 7     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 8     Title="MainWindow"
 9     Width="800"
10     Height="450"
11     FontSize="20"
12     mc:Ignorable="d">
13     <Window.Resources>
14         <ObjectDataProvider
15             x:Key="Provider"
16             MethodName="GetProperties"
17             ObjectInstance="{x:Type Colors}" />
18         <!--  ObjectInstance和ObjectType只能使用一种 ObjectInstance有点像反射  -->
19 
20         <ObjectDataProvider
21             x:Key="EnumProvider"
22             MethodName="GetEnumValues"
23             ObjectInstance="{x:Type local:EWeekDay}" />
24         <!--  颜色转换器  -->
25         <local:Converter x:Key="Converter" />
26     </Window.Resources>
27     <Grid>
28         <Grid.ColumnDefinitions>
29             <ColumnDefinition Width="1*" />
30             <ColumnDefinition Width="1*" />
31         </Grid.ColumnDefinitions>
32 
33         <ListView Grid.Column="0" ItemsSource="{Binding Source={StaticResource Provider}}">
34             <ListView.ItemTemplate>
35                 <DataTemplate>
36                     <StackPanel Orientation="Horizontal">
37                         <TextBlock Background="{Binding Converter={StaticResource Converter}}" Text="{Binding Name}" />
38                     </StackPanel>
39                 </DataTemplate>
40             </ListView.ItemTemplate>
41         </ListView>
42         <ListView Grid.Column="1" ItemsSource="{Binding Source={StaticResource EnumProvider}}" />
43     </Grid>
44 </Window>

运行结果

 

原文地址:https://www.cnblogs.com/AtTheMoment/p/15065650.html