"рдХреЙрд▓рдо" рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛рдЧреНрд░рд┐рдб рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдорд╛рдиреНрдпрддрд╛

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐





рдЕрдкрдиреА WPF рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП DataGrid рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдирд┐рдпрдВрддреНрд░рдг рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2010 рдХреА рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде, рдпрд╣ 4 рд╡реЗрдВ рдврд╛рдВрдЪреЗ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред



рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓реЗрдВ (DataGrid) рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рдХреА рдкреЗрд╢рдХрд╢ рдХреА рдЬрд┐рд╕рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕реЗ рдмрд╣реБрдд рд╣реА рдмрджрд▓ рджрд┐рдпрд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдВрдбреЛ рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рд╣реБрдЖред рд╕рдм рдХреБрдЫ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред



рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдПрдХ рдореЙрдбрд▓ рд╡рд┐рдВрдбреЛ рдХреЛ рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реАрдзреЗ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ (рдПрдХреНрд╕реЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ) рдбреЗрдЯрд╛ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рд╣рдореЗрдВ рдХрд░рдирд╛ рд╣реА рдЪрд╛рд╣рд┐рдПред



рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╣реБрдд рд╣реА рдХрд╛рд░реНрдп рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛: рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрдиред рдФрд░ рдпрджрд┐ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдорд╛рди рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ DataGrid рдореЗрдВ ValidationRule рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╢рд╛рдорд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╕реНрддреБ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реБрдЖред рдЕрд░реНрдерд╛рддреН, рдбреЗрдЯрд╛рдЧреНрд░рд┐рдб рдХреА "рдкрдВрдХреНрддрд┐" рдкрд░ рд╕рддреНрдпрд╛рдкрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ "рдХреЙрд▓рдо" рдкрд░ рдирд╣реАрдВред Google рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред





рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди





рддреЛ, рдЪрд▓реЛ DataGrid рдореЗрдВ "рдХреЙрд▓рдо" рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред



рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрд╕ рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╡реНрдпрдХреНрддрд┐ рд╡рд╕реНрддреБ рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ WPFBase рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП INotifyPropertyChanged рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:



public class WPFBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string PropertyName) { if (PropertyChanged != null ) { this .PropertyChanged( this , new PropertyChangedEventArgs(PropertyName)); } } public void OnPropertyChanged(MethodBase MethodeBase) { this .OnPropertyChanged(MethodeBase.Name.Substring(4)); } }

* This source code was highlighted with Source Code Highlighter .




  1. public class WPFBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string PropertyName) { if (PropertyChanged != null ) { this .PropertyChanged( this , new PropertyChangedEventArgs(PropertyName)); } } public void OnPropertyChanged(MethodBase MethodeBase) { this .OnPropertyChanged(MethodeBase.Name.Substring(4)); } }

    * This source code was highlighted with Source Code Highlighter .




  2. public class WPFBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string PropertyName) { if (PropertyChanged != null ) { this .PropertyChanged( this , new PropertyChangedEventArgs(PropertyName)); } } public void OnPropertyChanged(MethodBase MethodeBase) { this .OnPropertyChanged(MethodeBase.Name.Substring(4)); } }

    * This source code was highlighted with Source Code Highlighter .




  3. public class WPFBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string PropertyName) { if (PropertyChanged != null ) { this .PropertyChanged( this , new PropertyChangedEventArgs(PropertyName)); } } public void OnPropertyChanged(MethodBase MethodeBase) { this .OnPropertyChanged(MethodeBase.Name.Substring(4)); } }

    * This source code was highlighted with Source Code Highlighter .




  4. public class WPFBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string PropertyName) { if (PropertyChanged != null ) { this .PropertyChanged( this , new PropertyChangedEventArgs(PropertyName)); } } public void OnPropertyChanged(MethodBase MethodeBase) { this .OnPropertyChanged(MethodeBase.Name.Substring(4)); } }

    * This source code was highlighted with Source Code Highlighter .




  5. public class WPFBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string PropertyName) { if (PropertyChanged != null ) { this .PropertyChanged( this , new PropertyChangedEventArgs(PropertyName)); } } public void OnPropertyChanged(MethodBase MethodeBase) { this .OnPropertyChanged(MethodeBase.Name.Substring(4)); } }

    * This source code was highlighted with Source Code Highlighter .




  6. public class WPFBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string PropertyName) { if (PropertyChanged != null ) { this .PropertyChanged( this , new PropertyChangedEventArgs(PropertyName)); } } public void OnPropertyChanged(MethodBase MethodeBase) { this .OnPropertyChanged(MethodeBase.Name.Substring(4)); } }

    * This source code was highlighted with Source Code Highlighter .




  7. public class WPFBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string PropertyName) { if (PropertyChanged != null ) { this .PropertyChanged( this , new PropertyChangedEventArgs(PropertyName)); } } public void OnPropertyChanged(MethodBase MethodeBase) { this .OnPropertyChanged(MethodeBase.Name.Substring(4)); } }

    * This source code was highlighted with Source Code Highlighter .




  8. public class WPFBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string PropertyName) { if (PropertyChanged != null ) { this .PropertyChanged( this , new PropertyChangedEventArgs(PropertyName)); } } public void OnPropertyChanged(MethodBase MethodeBase) { this .OnPropertyChanged(MethodeBase.Name.Substring(4)); } }

    * This source code was highlighted with Source Code Highlighter .




  9. public class WPFBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string PropertyName) { if (PropertyChanged != null ) { this .PropertyChanged( this , new PropertyChangedEventArgs(PropertyName)); } } public void OnPropertyChanged(MethodBase MethodeBase) { this .OnPropertyChanged(MethodeBase.Name.Substring(4)); } }

    * This source code was highlighted with Source Code Highlighter .




  10. public class WPFBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string PropertyName) { if (PropertyChanged != null ) { this .PropertyChanged( this , new PropertyChangedEventArgs(PropertyName)); } } public void OnPropertyChanged(MethodBase MethodeBase) { this .OnPropertyChanged(MethodeBase.Name.Substring(4)); } }

    * This source code was highlighted with Source Code Highlighter .




  11. public class WPFBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string PropertyName) { if (PropertyChanged != null ) { this .PropertyChanged( this , new PropertyChangedEventArgs(PropertyName)); } } public void OnPropertyChanged(MethodBase MethodeBase) { this .OnPropertyChanged(MethodeBase.Name.Substring(4)); } }

    * This source code was highlighted with Source Code Highlighter .




  12. public class WPFBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string PropertyName) { if (PropertyChanged != null ) { this .PropertyChanged( this , new PropertyChangedEventArgs(PropertyName)); } } public void OnPropertyChanged(MethodBase MethodeBase) { this .OnPropertyChanged(MethodeBase.Name.Substring(4)); } }

    * This source code was highlighted with Source Code Highlighter .




  13. public class WPFBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string PropertyName) { if (PropertyChanged != null ) { this .PropertyChanged( this , new PropertyChangedEventArgs(PropertyName)); } } public void OnPropertyChanged(MethodBase MethodeBase) { this .OnPropertyChanged(MethodeBase.Name.Substring(4)); } }

    * This source code was highlighted with Source Code Highlighter .




  14. public class WPFBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string PropertyName) { if (PropertyChanged != null ) { this .PropertyChanged( this , new PropertyChangedEventArgs(PropertyName)); } } public void OnPropertyChanged(MethodBase MethodeBase) { this .OnPropertyChanged(MethodeBase.Name.Substring(4)); } }

    * This source code was highlighted with Source Code Highlighter .




  15. public class WPFBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string PropertyName) { if (PropertyChanged != null ) { this .PropertyChanged( this , new PropertyChangedEventArgs(PropertyName)); } } public void OnPropertyChanged(MethodBase MethodeBase) { this .OnPropertyChanged(MethodeBase.Name.Substring(4)); } }

    * This source code was highlighted with Source Code Highlighter .




public class WPFBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged( string PropertyName) { if (PropertyChanged != null ) { this .PropertyChanged( this , new PropertyChangedEventArgs(PropertyName)); } } public void OnPropertyChanged(MethodBase MethodeBase) { this .OnPropertyChanged(MethodeBase.Name.Substring(4)); } }

* This source code was highlighted with Source Code Highlighter .








рдЕрдм рджреЛ рдЧреБрдгреЛрдВ рд╡рд╛рд▓реЗ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рд╡рд░реНрдЧ рдмрдирд╛рдПрдБ: рдирд╛рдо рдФрд░ рд╕реНрд╡рд░ред рдФрд░ рд╣рдо рдЗрд╕реЗ WPFBase рд╕реЗ рд╡рд╛рд░рд┐рд╕ рдХрд░рддреЗ рд╣реИрдВ:







  1. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдВрд╢рд┐рдХ рд╡рд░реНрдЧ рд╡реНрдпрдХреНрддрд┐: WPFBase
  2. {
  3. рдирд┐рдЬреА рд╕реНрдЯреНрд░рд┐рдВрдЧ _Name;
  4. рдирд┐рдЬреА рд╕реНрдЯреНрд░рд┐рдВрдЧ _Vorname;
  5. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡реЛрд░реНрдирдореЗ
  6. {
  7. get { рд╡рд╛рдкрд╕реА _Vorname; }
  8. рд╕реЗрдЯ {_рд╡рд░реНрдирдо = рдорд╛рди ; OnPropertyChanged (MethodInfo.GetCurrentMethod ()); }
  9. }
  10. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо
  11. {
  12. {{_Name рд╡рд╛рдкрд╕реА ; }
  13. рд╕реЗрдЯ {_Name = рдорд╛рди ; OnPropertyChanged (MethodInfo.GetCurrentMethod ()); }
  14. }
  15. }


* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред




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



рдЗрд╕рд▓рд┐рдП рд╣рдо IDataErrorInfo рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рдФрд░ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕реНрд╡рдпрдВ рдЗрд╕ рдмрд╛рдд рдХреА рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рджреЗрдВ рдХрд┐ рдпрд╣ "рднрд░рд╛ рд╣реБрдЖ" рдХреНрдпрд╛ рд╣реИред рдЖрдЗрдП рд╢реБрд░реВ:







  1. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдВрд╢рд┐рдХ рд╡рд░реНрдЧ рд╡реНрдпрдХреНрддрд┐: IDataErrorInfo
  2. {
  3. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреНрд░реБрдЯрд┐
  4. {
  5. рдкреНрд░рд╛рдкреНрдд
  6. {
  7. рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреНрд░реБрдЯрд┐;
  8. StringBuilder sb = new StringBuilder ();
  9. рддреНрд░реБрдЯрд┐ = рдпрд╣ [ "рдирд╛рдо" ];
  10. рдЕрдЧрд░ (рддреНрд░реБрдЯрд┐! = рд╕реНрдЯреНрд░рд┐рдВрдЧред рдЦрд╛рд▓реА)
  11. sb.AppendLine (рддреНрд░реБрдЯрд┐);
  12. error = рдпрд╣ [ "рд╕реНрд╡рд░" ;
  13. рдЕрдЧрд░ (рддреНрд░реБрдЯрд┐! = рд╕реНрдЯреНрд░рд┐рдВрдЧред рдЦрд╛рд▓реА)
  14. sb.AppendLine (рддреНрд░реБрдЯрд┐);
  15. рдЕрдЧрд░ ( рд╕реНрдЯреНрд░рд┐рдВрдЧ .IsNullOrEmpty (sb.ToString ()))
  16. рд░рд┐рдЯрд░реНрди sb.ToString ();
  17. рд╡рд╛рдкрд╕реА "" ;
  18. }
  19. }
  20. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╣ [ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЙрд▓рдо рдирд╛рдо]
  21. {
  22. рдкреНрд░рд╛рдкреНрдд
  23. {
  24. рд╕реНрд╡рд┐рдЪ (рд╕реНрддрдВрдн рдирд╛рдо)
  25. {
  26. рдорд╛рдорд▓рд╛ "рдирд╛рдо" :
  27. рдпрджрд┐ ( string .IsNullOrEmpty ( рдпрд╣ .Name))
  28. рд╡рд╛рдкрд╕реА "рдПрдХ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ !!!" ;
  29. рддреЛрдбрд╝рдирд╛ ;
  30. рдорд╛рдорд▓рд╛ "Vorname" :
  31. рдЕрдЧрд░ ( рд╕реНрдЯреНрд░рд┐рдВрдЧ .IsNullOrEmpty ( рдпрд╣ .Vorname))
  32. рд╡рд╛рдкрд╕реА "рдЕрдВрддрд┐рдо рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ !!!" ;
  33. рддреЛрдбрд╝рдирд╛ ;
  34. рдбрд┐рдлрд╝реЙрд▓реНрдЯ :
  35. рддреЛрдбрд╝рдирд╛ ;
  36. }
  37. рд╡рд╛рдкрд╕реА "" ;
  38. }
  39. }
  40. }


* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


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



рдЦреИрд░, рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢: рд╣рдо IDataEditObject рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдпрджрд┐ рдЗрдирдкреБрдЯ рдСрдкрд░реЗрд╢рди рдирд┐рд░рд╕реНрдд рд╣реЛрдиреЗ рдкрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдореЗрдВ рдЕрд╡реИрдз рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдбреЗрдЯрд╛ рдЕрдкрдиреА рдореВрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реМрдЯ рдЖрддрд╛ рд╣реИ:







  1. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдВрд╢рд┐рдХ рд╡рд░реНрдЧ рд╡реНрдпрдХреНрддрд┐: IEditableObject
  2. {
  3. bool inEdit = false ;
  4. рд╡реНрдпрдХреНрддрд┐ рдЕрд╕реНрдерд╛рдпреА рд╡реНрдпрдХреНрддрд┐;
  5. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдЖрд░рдВрдн ()
  6. {
  7. рдпрджрд┐ (init)
  8. рд╡рд╛рдкрд╕реА;
  9. inEdit = true ;
  10. tempPerson = рдирдпрд╛ рд╡реНрдпрдХреНрддрд┐ ();
  11. tempPerson.Name = this ред рдирд╛рдо;
  12. tempPerson.Vorname = this .Vorname;
  13. }
  14. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рд░рджреНрдж рдХрд░реЗрдВ ()
  15. {
  16. рдЕрдЧрд░ (inEdit)
  17. рд╡рд╛рдкрд╕реА;
  18. indit = false ;
  19. рдпрд╣ ред рдирд╛рдо = tempPerson.Name;
  20. thisред рд╡реЛрд░рдирд╛рдо = tempPerson.Vorname;
  21. tempPerson = null ;
  22. }
  23. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рд╕рдорд╛рдкреНрддрд┐ ()
  24. {
  25. рдЕрдЧрд░ (inEdit)
  26. рд╡рд╛рдкрд╕реА;
  27. indit = false ;
  28. tempPerson = null ;
  29. }
  30. }


* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдПрдХ рдФрд░ рд▓рд┐рд╕реНрдЯрдкрд░реНрд╕рди рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ, рдЬреЛ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреЙрд▓реЗрдХреНрд╢рди <рдкрд░реНрд╕рди> рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рддрд╛ рд╣реИред рдкрд░реНрд╕рди рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдкрд░реНрд╕реЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЦреИрд░, рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рд╣рдо рддреБрд░рдВрдд рдХрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ ListPerson рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ:







  1. рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рд▓рд┐рд╕реНрдЯрдкрд░реНрд╕рди: рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреЙрд▓реЗрдХреНрд╢рди <рд╡реНрдпрдХреНрддрд┐>
  2. {
  3. рдкрдмреНрд▓рд┐рдХ рд▓рд┐рд╕реНрдЯрдкрд░реНрд╕рди ()
  4. {
  5. рдпрд╣ред Add ( рдирдпрд╛ рд╡реНрдпрдХреНрддрд┐)
  6. {
  7. рдирд╛рдо = "рдЗрд╡рд╛рдиреЛрд╡" ,
  8. рд╡реЛрд░реНрдирдореЗ = "рд╕рд░реНрдЧреЗрдИ"
  9. });
  10. рдпрд╣ред Add ( рдирдпрд╛ рд╡реНрдпрдХреНрддрд┐)
  11. {
  12. рдирд╛рдо = "рдкреЗрдЯреНрд░реЛрд╡" ,
  13. рд╡реЛрд░реНрдирдореЗ = "рдПрдВрдбреНрд░рдпреВ"
  14. });
  15. }
  16. }


* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рд╡рд┐рдВрдбреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ ListPerson рд╕рдВрдЧреНрд░рд╣ рдЬреЛрдбрд╝реЗрдВ:







  1. < Windowред рд╕реНрд░реЛрдд >
  2. < dt: ListPerson x: Key = "ListPerson" />
  3. </ Windowsред рд╕реНрд░реЛрдд >


* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдФрд░ рд╣рдо рдЕрдкрдиреА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛ рдХрд╣рд╛рдБ рд╕реНрдерд┐рдд рд╣реИ:







  1. < DataGrid ItemSource = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реЛрд░реНрд╕ = {StaticResource ListPerson}}" />


* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдЕрдм DataGrid рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:







  1. < DataGrid.RowValidationRules >
  2. < DataErrorValidationRule ValidationStep = "UpdatedValue" />
  3. </ DataGrid.RowValidationRules >


* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


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



рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рдХрдореА рд╣реИ рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рдм рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ: рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдорд╛рди рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рд╡реЗрд╢ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдПред



рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдо рдмрдирд╛рдПрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рдеред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рдбреЗрдЯрд╛рдЧреНрд░реЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХ рд╣реА рдХрдВрдЯреЗрдирд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреА рд╣реИред XAML рдХреЛ рдЗрд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗ рдбреЗрдЯрд╛ рдмрд╛рдБрдзрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ DependencyProperty рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ DependencyObject рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░рд╛ рдирдпрд╛ рдирд┐рдпрдо ValidationRule рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдмрд╕ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд ListPersonHelper рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ DependencyObject рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджреЗрддреЗ рд╣реИрдВред рдареАрдХ рд╣реИ, рдмрд╛рдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░реЛред рдЖрдЗрдП рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рджреЗрдЦреЗрдВ:







  1. рд╡рд░реНрдЧ рдХреЙрд▓рдо: рдЕрдорд╛рдиреНрдпрдХрд░рдг
  2. {
  3. рдирд┐рдЬреА ListPersonHelper _ListPerson;
  4. // рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рд╕рд╣рд╛рдпрдХ рд╣реИ; рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ DependencyProperty рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  5. рдЬрдирддрд╛ рдХреА рд╕реВрдЪреА
  6. {
  7. get { рд╡рд╛рдкрд╕реА _ListPerson; }
  8. рд╕реЗрдЯ {_ListPerson = рдорд╛рди ; }
  9. }
  10. // рдбреЗрдЯрд╛ рд╡реИрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
  11. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдУрд╡рд░рд░рд╛рдЗрдб рд╡реИрд▓рд┐рдбреЗрд╢рдиред рдкрд░рд┐рдгрд╛рдо Validate
  12. ( рдСрдмреНрдЬреЗрдХреНрдЯ рд╡реИрд▓реНрдпреВ , System.Globalization.CultureInfo cultureInfo)
  13. {
  14. рдмрд╛рдЗрдВрдбрдЧреНрд░реБрдк рдмреАрдЬреА = рдмрд╛рдЗрдВрдбрд┐рдВрдЧрдЧреНрд░реБрдк рдХреЗ рд░реВрдк рдореЗрдВ рдореВрд▓реНрдп ;
  15. рд╡реНрдпрдХреНрддрд┐ рд╡реНрдпрдХреНрддрд┐ = bg.Items [0] рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ ;
  16. // рдпрджрд┐ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рдорд╛рди рдирд╛рдо рдпрд╛ рдЙрдкрдирд╛рдо рдХреЗ рд╕рд╛рде рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ!
  17. var result = ListPerson.Items рдореЗрдВ p рд╕реЗ
  18. рдЬрд╣рд╛рдБ p! = person &&
  19. (p.Name == person.Name
  20. || p.Vorname == person.Vorname)
  21. рдкреА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ ;
  22. рдЕрдЧрд░ (рдкрд░рд┐рдгрд╛рдоред рдХрд┐рд╕реА рднреА)
  23. {
  24. рдирдпрд╛ ValidationResult рд▓реМрдЯрд╛рдПрдБ ( рдЭреВрдард╛ , "рдкрд╣рд▓реЗ рдпрд╛ рдЕрдВрддрд┐рдо рдирд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╣реИ" );
  25. }
  26. рд╡рд╛рдкрд╕реА рдорд╛рди редResult.ValidResult;
  27. }
  28. }
  29. // DependencyProperty рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ
  30. рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рд▓рд┐рд╕реНрдЯрдкрд░реНрд╕рди рд╣реЗрд▓реНрдкрд░: рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдСрдмреНрдЬреЗрдХреНрдЯ
  31. {
  32. // рдЖрдк XAML рдореЗрдВ рдЖрдЗрдЯрдо рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ рдмрд╛рдЗрдВрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдкреНрд░реЙрдкрд░реНрдЯреА рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  33. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ ListPerson рдЖрдЗрдЯрдо
  34. {
  35. get { рд╡рд╛рдкрд╕реА (ListPerson) GetValue (ItemProperty); }
  36. рд╕реЗрдЯ {SetValue (ItemProperty, value ); }
  37. }
  38. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛рдкреНрд░рдгрд╛рд▓реА
  39. DependencyProperty.Register
  40. ( "рдЖрдЗрдЯрдо" ,
  41. рдЯрд╛рдЗрдкреЛрдлрд╝ (рд▓рд┐рд╕реНрдЯрдкрд░реНрд╕рди),
  42. рдЯрд╛рдЗрдкреЛрдлрд╝ (рд▓рд┐рд╕реНрдЯрдкрд░реНрд╕рди рд╣реЗрд▓реНрдкрд░),
  43. рдирдпрд╛ UipropertyMetadata ( рдирд▓ ));
  44. }


* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рд╡рд┐рдВрдбреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ ListPersonHelper рдЬреЛрдбрд╝реЗрдВред DataGrid рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдкрд░ рдЖрдЗрдЯрдо рдЧреБрдг рд╕реЗрдЯ рдХрд░реЗрдВред ValidationRules рдЯреЗрдмрд▓реНрд╕ рдореЗрдВ, рд╣рдорд╛рд░рд╛ рдирдпрд╛ ColumnValidation рдирд┐рдпрдо рдЬреЛрдбрд╝реЗрдВред рд╣рдо ListPerson рд╕рдВрд╕рд╛рдзрди рдкрд░ ListPerson рдЧреБрдг рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╡рд╣ рд╕рдм рд╣реИ:







  1. < рд╡рд┐рдВрдбреЛ x: рдХреНрд▓рд╛рд╕ = "DPTest.MainWindow"
  2. xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/pretation"
  3. xmlns: x = "http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns: dt = "clr-namespace: DPTest"
  5. рд╢реАрд░реНрд╖рдХ = "рдореЗрдирд╡рд┐рдВрдбреЛ" рдКрдБрдЪрд╛рдИ = "437" рдЪреМрдбрд╝рд╛рдИ = "684" >
  6. < Windowред рд╕реНрд░реЛрдд >
  7. < dt: ListPerson x: Key = "ListPerson" />
  8. < dt: ListPersonHelper x: Key = "ListPersonHelper"
  9. рдЖрдЗрдЯрдо = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реЛрд░реНрд╕ = {StaticResource ListPerson}}" />
  10. < ControlTemplate x: Key = "GridError" >
  11. < рдЧреНрд░рд┐рдб рдорд╛рд░реНрдЬрд┐рди = "0, -2.0, -2"
  12. рдЯреВрд▓рдЯрд┐рдк = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд░рд┐рд▓реЗрдЯрд┐рд╡рд╕реЛрд░реНрд╕ = {рд░рд┐рд▓реЗрдЯрд┐рд╡рд╕реЛрд░реНрд╕



    FindAncestor, AncestorType = {x: рдЯрд╛рдЗрдк рдХрд░реЗрдВ DataGridRow}},



    рдкрд╛рде = (рдорд╛рдиреНрдпрддрд╛ред рдПрд░рд┐рдпрд░) [0]ред рдИрдпрд░ рдХреЙрдиреНрдЯреЗрдВрдЯ} "

    >
  13. < рджреАрд░реНрдШрд╡реГрддреНрддреАрдпрддрд╛ = "0" рднрд░реЗрдВ = "рд▓рд╛рд▓"
  14. рдЪреМрдбрд╝рд╛рдИ = "{рдЯреЗрдореНрдкреНрд▓реЗрдЯрдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдлреЙрдиреНрдЯрд╕рд╛рдЗрдЬрд╝}"
  15. рдКрдБрдЪрд╛рдИ = "{рдЯреЗрдореНрдкреНрд▓реЗрдЯрдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдлрд╝реЙрдиреНрдЯ рдЖрдХрд╛рд░"} />
  16. < TextBlock рдкрд╛рда = "!" FontSize = "{TemplateBinding FontSize}"
  17. FontWeight = "рдмреЛрд▓реНрдб" рдлрд╝реЛрд░рдЧреНрд░рд╛рдЙрдВрдб = "рд╡реНрд╣рд╛рдЗрдЯ"
  18. рдХреНрд╖реИрддрд┐рдЬрдХрд░рдг = "рдХреЗрдВрджреНрд░" />
  19. </ рдЧреНрд░рд┐рдб >
  20. </ ControlTemplate >
  21. </ Window.Resources >
  22. < рдЧреНрд░рд┐рдб >
  23. < DataGrid ItemSource = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реЛрд░реНрд╕ = {StaticResource ListPerson}}"
  24. AutoGenerateColumns = "рдЧрд▓рдд"
  25. RowValidationErrorTemplate = "{StaticResource GridError}" >
  26. < DataGrid.Columns >
  27. < DataGridTextColumn
  28. рдмрдВрдзрди = "{рдмрдВрдзрди рдкрде = рд╕реНрд╡рд░"
  29. рд╣реЗрдбрд░ = "рд╡реЛрд░реНрдирдореЗ" />
  30. < DataGridTextColumn
  31. рдмрдВрдзрди = "{рдмрдВрдзрди рдкрде = рдирд╛рдо}"
  32. рд╣реЗрдбрд░ = "рдирд╛рдо" />
  33. </ DataGrid.Columns >
  34. < DataGrid.RowValidationRules >
  35. < DataErrorValidationRule
  36. ValidationStep = "UpdatedValue" />
  37. < dt: ColumnValidation
  38. рдорд╛рдиреНрдпрдХрд░рдгрд╕реНрдЯреЗрдк = "UpdatedValue" >
  39. < dt: ColumnValidation.ListPerson >
  40. < dt: ListPersonHelper
  41. рдЖрдЗрдЯрдо = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реЛрд░реНрд╕ = {StaticResource ListPerson}}" />
  42. </ dt: ColumnValidation.ListPerson >
  43. </ dt: ColumnValidation >
  44. </ DataGrid.RowValidationRules >
  45. </ рдбрд╛рдЯрд╛рдЧреНрд░рд┐рдб >
  46. </ рдЧреНрд░рд┐рдб >
  47. </ Window >


* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред




рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: DataGridColumnValidation.zip (71.37 kb)



All Articles