WPF: рдорд╛рд░реНрдХрдЕрдкрдкреЗрдВрд╢рди рдЬреИрд╕реЗ рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕

рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ WPF рдореЗрдВ рдмрд╛рдзреНрдпрдХрд╛рд░реА рддрдВрддреНрд░ рдХреА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд╡реЗ рдЖрдкрдХреЛ рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдпреВрдЖрдИ рдореЗрдВ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╕реНрд░реЛрдд рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ XAML рдХреЛрдб рдореЗрдВ рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
public class DateConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { DateTime date = (DateTime)value; return date.ToShortDateString(); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return null; } } 

рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ: рдЗрдирдкреБрдЯ рдХрдирд╡рд░реНрдЯрд░ рдбреЗрдЯрд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рд░рд┐рд╡рд░реНрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдХрдирд╡рд░реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 <Window x:Class="TestConvertorMarkup.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:converters="clr-namespace:TestConvertorMarkup.Converters" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <converters:DateConverter x:Shared="false" x:Key="dateConverter"/> </Window.Resources> <Label Content="{Binding Path=Date, Converter={StaticResource dateConverter}}" /> </Window> 

рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдорд╛рдЗрдирд╕ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХрдирд╡рд░реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдЖрдкрдХреЛ рдпрд╛ рддреЛ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрд╕рд╛рдзрди рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ XAML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдРрд╕реЗ рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдкрд░ рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХреБрдЫ рдЦреЛрдЬреЛрдВ рдХреЗ рдмрд╛рдж, рдпрд╣рд╛рдВ рдореБрдЭреЗ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдХрдирд╡рд░реНрдЯрд░ рдХреЛ рд╕реНрд╡рдпрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 public class NumberToStringConverterExtension: MarkupExtension, IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { DateTime date = (DateTime)value; return date.ToShortDateString(); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } public override object ProvideValue(IServiceProvider serviceProvider) { if (_converter == null) _converter = new NumberToStringConverterExtension(); return _converter; } private static NumberToStringConverterExtension _converter = null; } 

рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрд╢реЛрдзрди рдХреЗ рдмрд╛рдж, XAML рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
 <Label Content="{Binding Path=Date, Converter={converters:DateTimeToString}}" /> 

рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗред рдЖрдкрдХреЛ рдЙрдкрдпреБрдХреНрдд "рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕" рдирд╛рдорд╕реНрдерд╛рди рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рдЕрдЪреНрдЫрд╛ рдмреЛрдирд╕ рдпрд╣ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╕рдордп, рдЙрдкрд▓рдмреНрдз рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ:

рдЪрд▓реЛ рд╡рд╣рд╛рдБ рдирд╣реАрдВ рд░реБрдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдирдП рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВ:
 public abstract class ConvertorBase<T> : MarkupExtension, IValueConverter where T : class, new() { /// <summary> /// Must be implemented in inheritor. /// </summary> public abstract object Convert(object value, Type targetType, object parameter, CultureInfo culture); /// <summary> /// Override if needed. /// </summary> public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } #region MarkupExtension members public override object ProvideValue(IServiceProvider serviceProvider) { if (_converter == null) _converter = new T(); return _converter; } private static T _converter = null; #endregion } 

рдЕрдм рд╣рдо рдЕрдкрдиреЗ DateConverter рдХреЛ рдЗрд╕рдореЗрдВ рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕рдореЗрдВ Convert рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗред рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 public class DateTimeToString : ConvertorBase<DateTimeToString> { public override object Convert(object value, Type targetType, object parameter, CultureInfo culture) { DateTime date = (DateTime)value; return date.ToShortDateString(); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return null; } } 

XAML рдХреЛрдб рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ XAML рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рд╕рд░рд▓реАрдХреГрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛, рдФрд░ рдХрдирд╡рд░реНрдЯрд░ рдХреЛрдб рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреАрдПрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред

Source: https://habr.com/ru/post/In140876/


All Articles