مبدل مقادیر (Value Converters) در WPF
سه شنبه 4 خرداد 1395مبدل مقدار برای نمایش مقادیر به شیوه ای معنی دار در WPF استفاده می شود. با استفاده از مبدل مقادیر میتوان داده ها را محلی سازی کرد و شی براساس داده های اصولی ایجاد کرد.در این مقاله قصد داریم درباره ی مبدل مقادیر در 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 های فیلد های متعدد ناشی میشود.
خروجی :
- WPF
- 2k بازدید
- 1 تشکر