WPF: рдХрдирд╡рд░реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк

рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдкрд░ рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХреЛ рдорд╛рд░реНрдХрдЕрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдмрддрд╛рдпрд╛ред рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХреЗ рд╡рд┐рд╖рдп рдХреЛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрдирд╡рд░реНрдЯрд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рдЕрдХреНрд╕рд░, рдпреВрдЖрдИ рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реНрд░реЛрдд рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдирд╡рд░реНрдЯрд░ рдХреЛ рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рджрд┐рдирд╛рдВрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд▓реМрдЯрддреЗ рд╣реБрдП, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рддрд┐рдерд┐ рдХреЛ рдХрдИ рдХреИрд▓реЗрдВрдбрд░ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рд╣реА рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдХреИрд▓реЗрдВрдбрд░ рджрд┐рдирд╛рдВрдХ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╕реНрд░реЛрдд рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
<Label Content="{Binding Path=Date, Converter={StaticResource dateConverter}, ConverterParameter='Gregorian'}" /> 

рдЗрд╕реА рддрд░рд╣, рдпрджрд┐ рдЖрдк MarkupExtension рдЬреИрд╕реЗ рдХрдиреНрд╡рд░реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
 <Label Content="{Binding Path=Date, Converter={converters:DateTimeToString}, ConverterParameter='Gregorian'}" /> 

рдЬрдм рдЗрд╕ рдХрдирд╡рд░реНрдЯрд░ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореВрд▓реНрдп "рдЧреНрд░реЗрдЧреЛрд░рд┐рдпрди" рдЗрд╕рдХреЗ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ "рдкреИрд░рд╛рдореАрдЯрд░" рдореЗрдВ рд╣реЛрдЧрд╛ рдФрд░ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рди рдЬрд╛рдПрдВрдЧреЗ рдХрд┐ рдпрд╣ рддрд╛рд░реАрдЦ рдЧреНрд░реЗрдЧреЛрд░рд┐рдпрди рдХреИрд▓реЗрдВрдбрд░ рдореЗрдВ рд╣реИ:
  public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { DateTime date = (DateTime)value; string calendar = (string)parameter; if (calendar == "Gregorian") return DateTimeHelpers.GregorianToString(calendar); else if (calendar == "Gregorian") return DateTimeHelpers.GregorianToString(calendar); } 

рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ


рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрджреНрднреБрдд рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рджреЛ рдпрд╛ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХрдирд╡рд░реНрдЯрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреЛ рдпрд╛ рдЕрдзрд┐рдХ? рдорд╛рдирдХ рддрд░реАрдХреЛрдВ рд╕реЗ, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ urrri habrayuzer рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдХрдирд╡рд░реНрдЯрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ MarkupExtension рд╣реИред рдЙрдирдХреА рдЕрдиреБрдорддрд┐ рд╕реЗ рдореИрдВ рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред

рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо рдкрд╣рд▓реЗ рд▓реЗрдЦ рд╕реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ:
  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(); } public override object ProvideValue(IServiceProvider serviceProvider) { return this; } } 

рд╕рдВрд╢реЛрдзрди рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХрд╛ рд╕реНрдерд┐рд░ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд▓реМрдЯрддреЗ рд╣реИрдВред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдХрдирд╡рд░реНрдЯрд░ рдХреЛ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рджрд┐рдирд╛рдВрдХ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдкреНрд░рд╛рд░реВрдкред рдХрдирд╡рд░реНрдЯрд░ рдмрджрд▓реЗрдВ:
  public class DateTimeToString : ConvertorBase<DateTimeToString> { /// Format for converting DateTime to string. /// </summary> public string Format { set; private get; } /// <summary> /// Date of what calendar current instance is representing. /// </summary> public string Calendar { set; private get; } public override object Convert(object value, Type targetType, object parameter, CultureInfo culture) { DateTime date = (DateTime)value; if (calendar == "Gregorian") return DateTimeHelpers.GregorianToString(date, Format); else if (calendar == "Gregorian") return DateTimeHelpers.GregorianToString(date, Format); } } 

рдХрдиреНрд╡рд░реНрдЯрд░ рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
 <Label Content="{Binding Path=Date, Converter={converters:DateTimeToString Calendar='Gregorian', Format ='Today is {0}'}}" /> 

рдпрджрд┐ рдХрдирд╡рд░реНрдЯрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдкрд╛рджрдХ рд╣рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛:

рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
 <Label Content="{Binding Path=Date, Converter={converters:DateTimeToString}" /> 

рдЬрдм рдХрдирд╡рд░реНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдЦрд╛рд▓реА рд╣реЛрдВрдЧреЗред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рджреВрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдкреНрд░рд╛рд░реВрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдХреИрд▓реЗрдВрдбрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╣рдо рдорд╛рди рд▓реЗрдВрдЧреЗ рдХрд┐ рдХреИрд▓реЗрдВрдбрд░ рдЧреНрд░реЗрдЧреЛрд░рд┐рдпрди рд╣реИред рдЪрд▓реЛ рдХрдирд╡рд░реНрдЯрд░ рдореЗрдВ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдПрдХ рдЪреЗрдХ рдЬреЛрдбрд╝реЗрдВ:
  [ValueConversion(typeof(DateTime), typeof(String))] public class DateTimeToString : ConvertorBase<DateTimeToString> { /// <summary> /// Format string. /// </summary> public string Format { set; private get; } /// <summary> /// Date of what calendar current instance is representing. /// </summary> public string Calendar { set { _calendar = value; } private get { return _calendar; } } /// <summary> /// Default calendar. /// </summary> private string _calendar = "Gregorian"; public override object Convert(object value, Type targetType, object parameter, CultureInfo culture) { DateTime date = (DateTime)value; Debug.Assert(date != null, "Date is missing."); Debug.Assert(Format != null, "Format is missing."); if (Calendar == "Gregorian") return DateTimeHelpers.GregorianToString(date, Format); else if (Calendar == "Gregorian") return DateTimeHelpers.GregorianToString(date, Format); } } 

рдЕрдм, рдпрджрд┐ рджрд┐рдирд╛рдВрдХ рдХреЛ рдХрдирд╡рд░реНрдЯрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдпрджрд┐ рдкреНрд░рд╛рд░реВрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕реА рдЕрдЪреНрдЫреА рдЦрд┐рдбрд╝рдХреА рд╣реЛрдЧреА рдЬреЛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИ:

рдореИрдВрдиреЗ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП ValueConversion рд╡рд┐рд╢реЗрд╖рддрд╛ рднреА рдЬреЛрдбрд╝реА (рдЯрд╛рдЗрдкреЛрдлрд╝ (DateTime), рдЯрд╛рдЗрдкреЛрдлрд╝ (рд╕реНрдЯреНрд░рд┐рдВрдЧ))ред рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрдирд╡рд░реНрдЯрд░ рдбреЗрдЯрд╛рдЗрдо рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕рднреА рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рддрдм рдЬрдм рдЖрдк рдХреНрд▓рд╛рд╕ рд╣реЗрдбрд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдФрд░ рдХреНрдпрд╛ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

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


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


All Articles