• WPF枚举绑定


    此示例演示如何绑定到枚举。 遗憾的是,没有直接方法可以将枚举用作数据绑定源。 但是,Enum.GetValues(Type) 方法可返回值的集合。 这些值可以包装在 ObjectDataProvider 中并用作数据源。

    ObjectDataProvider 类型提供了一种在 XAML 中创建对象并将其用作数据源的便捷方式。使用 ObjectDataProvider  类型包装枚举类型本身提供的枚举值数组。

    1. "DirectionEnumDataSource" ObjectType="{x:Type sys:Enum}" MethodName="GetValues">
    2. "local:DirectionType">

    在此示例中,ObjectDataProvider 使用三个属性来检索枚举:

    属性描述
    ObjectType数据提供程序要返回的对象类型。 在本示例中为 System.Enum。 sys: XAML 命名空间映射到 System
    MethodName要在 System.Enum 类型上运行的方法的名称。 在本示例中为 Enum.GetValues
    MethodParameters要提供给 MethodName 方法的值的集合。 在此示例中,该方法采用枚举的 System.Type

    实际上,XAML 正在分解方法调用、方法名称、参数和返回类型。 这里配置的ObjectDataProvider等效于一下代码:

    var DirectionEnumDataSource = System.Enum.GetValues(typeof(EnumBinding.DirectionType));

    引用ObjectDataProvider资源:

    1. "{Binding Source={StaticResource DirectionEnumDataSource}}" SelectedIndex="0"/>
    2. "{Binding Source={StaticResource DirectionEnumDataSource}}" SelectedIndex="0"/>

    或通过代码的方式:

    1. "MyListBox">
    2. "MyComboBox">
    1. MyListBox.ItemsSource = System.Enum.GetValues(typeof(DirectionType));
    2. MyComboBox.ItemsSource = System.Enum.GetValues(typeof(DirectionType));

    完整测试代码:

    MainWindow.xaml

    1. "EnumBinding.MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    6. xmlns:local="clr-namespace:EnumBinding"
    7. xmlns:sys="clr-namespace:System;assembly=mscorlib"
    8. mc:Ignorable="d"
    9. Title="MainWindow" Height="450" Width="800">
    10. "DirectionEnumDataSource" ObjectType="{x:Type sys:Enum}" MethodName="GetValues">
    11. "local:DirectionType">
    12. "{Binding Source={StaticResource DirectionEnumDataSource}}" SelectedIndex="0"/>
    13. "{Binding Source={StaticResource DirectionEnumDataSource}}" SelectedIndex="0"/>
    14. "MyListBox">
    15. "MyComboBox">

    MainWindow.xaml.cs

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. using System.Windows;
    7. using System.Windows.Controls;
    8. using System.Windows.Data;
    9. using System.Windows.Documents;
    10. using System.Windows.Input;
    11. using System.Windows.Media;
    12. using System.Windows.Media.Imaging;
    13. using System.Windows.Navigation;
    14. using System.Windows.Shapes;
    15. namespace EnumBinding;
    16. public enum DirectionType : int
    17. {
    18. Buy = 0,
    19. Sell = 1,
    20. }
    21. public partial class MainWindow : Window
    22. {
    23. public MainWindow()
    24. {
    25. InitializeComponent();
    26. MyListBox.ItemsSource = System.Enum.GetValues(typeof(DirectionType));
    27. MyComboBox.ItemsSource = System.Enum.GetValues(typeof(DirectionType));
    28. }
    29. }

  • 相关阅读:
    网络编程03-UDP协议
    SS命令使用介绍
    字节5年测试工程师经验分享,软件测试真的很简单么?
    花了 3000 美元,我在 SaaStr 大会学到了什么?——码农驱动的 SaaS 增长之路
    重点速看,超全面汇编?成都市关于加快发展先进制造业实现工业转型升级发展若干政策的申报条件、时间、材料和奖励
    大数据-数据分析初步学习,待补充
    Tomcat应用没有严格的域名限制漏洞修复
    数据库PostgreSQL PG 字符串拼接,大小写转换,substring
    BrokenPipeError错误和python subprocess.run()超时参数在Windows上无效
    浏览器标签上添加icon图标;html引用ico文件
  • 原文地址:https://blog.csdn.net/xunmeng2002/article/details/133084905