WPF 格式化輸出- IValueConverter接口的使用

以前在用ASP.NET 做B/S系統時,可以方便地在GRIDVIEW DATAList等數據控件中,使用自定義的代碼邏輯,比如

使用 <%# GetBalance(custID) %> 這樣的調用, GetBalance()爲在codebehind類中定義的方法;

在WPF應用程序中有時也有類似的需求,比如數據庫表Teacher中有一個字段 Title ,int 類型,取值爲1-5,分別對應講師  研究員 高工  副教授 教授 。在wpf窗口中需要直接顯示 講師 研究員 類似的文字,而不是一個1-5的數字,從界面設計的角度 ,用文字來表示職稱是最自然的方式。因此在數據綁定的時候需要將整數轉換爲對應的文本職稱。 但是WPF沒有象ASP。NET那樣的綁定表達式用法;該怎麼辦呢?

 

WPF框架提供了一個IValueConverter接口,負責數據源到數據控件綁定時,自定義轉換邏輯。使用它包括以下步驟:

1.創建一個只轉換器類,實現該接口;

2.給該類加入ValueConversion屬性,並制定源類型和目標類型;

3.實現該接口的兩個方法,Convert()與ConvertBack()

4.按照1-3創建類之後,在數據綁定控件中,設定Converter爲該類的一個實例;

 

具體要完成上述功能:

1.首先創建實現 IValueConverter的類:

//指定轉換器源類型和目標類型

 [ValueConversion(typeof(int), typeof(string))]
   public class TitleConverter:IValueConverter
    {

      

 

       //實現接口的兩個方法
        #region IValueConverter 成員

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            int titleInt = (int)value;
            string titleStr = string.Empty;
            switch (titleInt)
            {
                case 5:
                    titleStr = "教授";
                    break;
                case  4:
                    titleStr = "副教授";
                    break;
                case 3:
                    titleStr = "高工";
                    break;
                case 2:
                    titleStr = "研究員";
                    break;
                case 1:
                    titleStr = "講師";
                    break;
           
            }


            return titleStr;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string titleStr = value.ToString();
            int titleInt = 0;
            switch (titleStr)
            {
                case "教授":
                    titleInt = 5;
                    break;
                case "副教授":
                    titleInt = 4;
                    break;
                case "高工":
                    titleInt = 3;
                    break;
                case "研究員":
                    titleInt = 2;
                    break;
                case "講師":
                    titleInt = 1;
                    break;
           
           
            }

            return titleInt;
        }

        #endregion
    }

2.前臺調用

首先需要在窗口中聲明轉換器類名稱空間 並定義一個轉換器資源

<Window x:Class="EvalStarServer.UserManage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:EvalStarServer.BLL"
        Title="UserManage" >
    <Window.Resources>
        <local:TitleConverter x:Key="myTitleConverter"></local:TitleConverter>
    </Window.Resources>

<DataGrid Name="gdEvaluator" CanUserAddRows="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="姓名" Binding="{Binding Path=Name}"></DataGridTextColumn>                 
                    <DataGridTextColumn Header="職稱" Binding="{Binding Path=Elevel,Converter={StaticResource myTitleConverter}}"></DataGridTextColumn>
                    <DataGridTextColumn Header="編號" Binding="{Binding Path=Eno}"></DataGridTextColumn>
                    <DataGridTemplateColumn Header="操作">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Button Tag="{Binding Path=ID}"  Click="OnDeleteEvl">刪除</Button>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>

 

</Windows>

 

這樣就實現了前臺根據數據中的整數 顯示不同的職稱。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章