مبدل مقادیر (Value Converters) در WPF

سه شنبه 4 خرداد 1395

مبدل مقدار برای نمایش مقادیر به شیوه ای معنی دار در WPF استفاده می شود. با استفاده از مبدل مقادیر میتوان داده ها را محلی سازی کرد و شی براساس داده های اصولی ایجاد کرد.در این مقاله قصد داریم درباره ی مبدل مقادیر در WPF صحبت کنیم و نمونه ای از آن بسازیم.

مبدل مقادیر (Value Converters) در WPF

مبدل مقدار (Value Converters) برای نمایش مقادیر به شیوه ای معنی دار در WPF استفاده می شوند .مبدل مقادیر  اساسا به همراهdata binding  استفاده می شود. با مبدل مقدار، همچنین می توانید داده ها را محلی سازی کنید، شی بر اساس داده های اصولی ایجاد ، و حتی مقادیری که از عناصر محدود متعدد گرفته شده را ایجاد کنید.

کاربردهای احتمالی:

1. یک کد عددی که نشان دهنده یک عنوان شغلی است را به  یک رشته که حاوی عنوان شغلی زیر هستند ، تبدیل میکند:

 1. Product Owner (مالک محصول)
 2.    Scrum Master (اسکرام مستر)
 3.   Software Developer ( توسعه دهنده نرم افزار)

 

Formatting Currency .2 : تبدیل مقادیر پولی به رشته ای با  فرمت Currency

Formatting Dates .3 : قالب بندی تاریخ به فرمت های مختلف تاریخ ، به عنوان مثال 14/04/2016, Thursday, April 14, 2016.

4. مبدل برای return object : ذخیره سازی تصویر به صورت مسیرهای رشته ای در دیتابیس ،که در هنگام مشاهده ،داده ها  بارگذاری و تصاویر نمایش داده میشوند.

به منظور استفاده از مقدار مبدلهای آنان، ابتدا باید رابط IValueConverter ارائه شده توسط PresentationFramework را  فرا بگیریم. این دو متد شامل:

Convert .2 : یک نوع ورودی را به یک نوع خروجی تبدیل می کند. به عنوان مثال. یک کد عددی (نوع int) به عنوان شغل (نوع رشته) تبدیل میکند.

ConvertBack .3 : وارونه تبدیل میکند.

علاوه بر این، مقادیر مبدل ها culture-aware  هستند.. پارامترهای متد Convert  و ConvertBack شامل یک مرجع به شی Culture  است که برای تبدیل استفاده می شود. شما می توانید از مقدار این پارامتر برای برگرداندن اطلاعات محلی  استفاده کنید.

نحوه استفاده از مبدل مقادیر:

علاوه بر اجرای IValueConverter، شما باید کلاسی با ویژگی ValueConversion، که نوع منبع (source type) و نوع هدف (target type)  برای تبدیل را مشخص کنید. به عنوان مثال. تبدیل یک نوع Integer به  نوع هدف String نشان داده شده است:

[ValueConversion(typeof(<SourceType>), typeof(<TargetType>))]

 

کد نمونه:
این  مثال، تبدیل مقدار int  به  string  را نشان می دهد

    [ValueConversion(typeof(int), typeof(string))]  
    public class TestConverter: IValueConverter  
    {  
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)  
        {  
            throw new NotImplementedException();  
        }  
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {  
            throw new NotImplementedException();  
        }  
    }  

در مثال زیر، چند  گزینه  برای  انتخاب وجود دارد .  شما می توانید هریک را  در یک زمان انتخاب کنید و نتیجه هرکدام را ببینید.. ایده در behind  مثال است که نحوه ی تبدیل  دریافت  و بازیابی تصویر از center location  و برگرداندن  تصویر  به عنوان یک شی ، و پس از آن  به یک منبع تصویر از طریق data binding  متصل شود.

اگر هیچ تصویر در center location  در دسترس نباشد ، ابزار پیش نمایش placeholder  موجود را  نشان می دهد

شما می توانید یک کلاس converter در پروژه خود ایجاد و فضای نام خود را در XAML ارائه دهید.

 

ImageConverter.cs

    [ValueConversion(typeof(string), typeof(BitmapImage))]  
    public class ImageConverter: IValueConverter   
    {  
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)  
        {  
            try  
            {  
                string myPath = (string) value;  
                Uri myURI = new Uri(myPath, UriKind.RelativeOrAbsolute);  
                BitmapImage anImage = new BitmapImage(myURI);  
                return anImage;  
            } catch (Exception)  
            {  
                return new BitmapImage(new Uri("/Images/NoPreview.png", UriKind.RelativeOrAbsolute));  
            }  
        }  
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {  
            throw new NotImplementedException();  
        }  
    }  

 Namespace  در  Xaml :

    xmlns:converter="clr-namespace:Certification.Converter"  

پس از اعلام فضای نام، شما می توانید یک نمونه از شی با افزودن به یکی از مجموعه های منابع ایجاد کنید و یک مقدار کلید زیر window resource برای  استفاده از آن در سطح global. اختصاص دهید.

    <Window.Resources>  
        <converter:ImageConverter x:Key="ImagePathConverter" />   
    </Window.Resources>  

پس از ایجاد  یک شی ، شما می توانید با  پراپرتی converter ، اتصال به آن را با اشاره به منابع تنظیم کنید.

Data binding:

    <Image Grid.Column="1" Height="140" Width="150" Source="{Binding Path=ImageSource,  
    RelativeSource={RelativeSource Mode=FindAncestor,   
    AncestorType={x:Type Window}},Mode=TwoWay,  
    UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ImagePathConverter}}" />  

 

همچنین MultiValueConverter که یک مقدار تبدیل شده است  ، که از  return  های فیلد های متعدد ناشی میشود.

 

خروجی :

 

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • WPF
  • 2k بازدید
  • 1 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید