• 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. }

  • 相关阅读:
    spring @value @configurationProperties比较
    R语言使用原生包(基础导入包、graphics)中的boxplot函数可视化箱图(box plot)
    Mybatis 12
    VuePress@next 使用数学公式插件
    【C++】单例模式
    c++-json(0)-rapidjson-read-write-实例代码
    50分钟的Java面试,常见的问题都问到了
    655. 输出二叉树 : 常规 DFS 运用题(树的遍历)
    网络编程、广播、组播、数据库sqlite3
    MySQL怎么加锁的?
  • 原文地址:https://blog.csdn.net/xunmeng2002/article/details/133084905