2022年2月14日 星期一

WPF Enum Binding to Combobox itemssource

將Enum的內容Binding到Combobox的itemssource


參考網址如下

https://www.c-sharpcorner.com/article/bind-combobox-with-enum-using-objectdataprovider-wpf-mvvm/


  • 預設enum內容如下:

    public enum 加工項目類別

    {

        [Description("G01")]

        G01Test,

    }


  • 新增static function for enum get Description 如下:
            此方法可取得enum設定的Description 內容

        public static string GetEnumDescription<T>(this T source)

        {

            FieldInfo fi = source.GetType().GetField(source.ToString());

            DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(

                typeof(DescriptionAttribute), false);

            if (attributes != null && attributes.Length > 0) return attributes[0].Description;

            else return source.ToString();

        }

  • 將Enum的內容Binding到Combobox的itemssource使用方法如下:

xaml設定新增:

      xmlns:sys ="clr-namespace:System;assembly=mscorlib"
      xmlns:model="clr-namespace:特殊加工.model"

新增Resource:

<Page.Resources>

        <ObjectDataProvider x:Key="dataFromEnum" 

                            MethodName="GetValues"

                            ObjectType="{x:Type sys:Enum}">

            <ObjectDataProvider.MethodParameters>

                <x:Type TypeName="model:加工項目類別"/>

            </ObjectDataProvider.MethodParameters>

        </ObjectDataProvider>

</Page.Resources>


解釋:

    x:Key="dataFromEnum"   => 命名該resource方便以後使用

MethodName="GetValues"  => GetValues方法

ObjectType="{x:Type sys:Enum}"  => 使用Enum 類型

TypeName="model:加工項目類別" = >   你的enum名稱

沒有留言:

張貼留言