рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
рдЕрдкрдиреА 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 .
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 .
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 .
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 .
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 .
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 .
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 .
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 .
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 рд╕реЗ рд╡рд╛рд░рд┐рд╕ рдХрд░рддреЗ рд╣реИрдВ:
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдВрд╢рд┐рдХ рд╡рд░реНрдЧ рд╡реНрдпрдХреНрддрд┐: WPFBase
- {
- рдирд┐рдЬреА рд╕реНрдЯреНрд░рд┐рдВрдЧ _Name;
- рдирд┐рдЬреА рд╕реНрдЯреНрд░рд┐рдВрдЧ _Vorname;
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡реЛрд░реНрдирдореЗ
- {
- get { рд╡рд╛рдкрд╕реА _Vorname; }
- рд╕реЗрдЯ {_рд╡рд░реНрдирдо = рдорд╛рди ; OnPropertyChanged (MethodInfo.GetCurrentMethod ()); }
- }
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо
- {
- {{_Name рд╡рд╛рдкрд╕реА ; }
- рд╕реЗрдЯ {_Name = рдорд╛рди ; OnPropertyChanged (MethodInfo.GetCurrentMethod ()); }
- }
- }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЖрдкрдиреЗ рд╢рд╛рдпрдж рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрдХреНрддрд┐ рд╡рд░реНрдЧ рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдЕрдзрд┐рдХ рдЗрдВрдЯрд░рдлреЗрд╕ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рд╣рдо рдХрдХреНрд╖рд╛ рдХреЛ рддреАрди рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВрдЧреЗред
рдЗрд╕рд▓рд┐рдП рд╣рдо IDataErrorInfo рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рдФрд░ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕реНрд╡рдпрдВ рдЗрд╕ рдмрд╛рдд рдХреА рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рджреЗрдВ рдХрд┐ рдпрд╣ "рднрд░рд╛ рд╣реБрдЖ" рдХреНрдпрд╛ рд╣реИред рдЖрдЗрдП рд╢реБрд░реВ:
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдВрд╢рд┐рдХ рд╡рд░реНрдЧ рд╡реНрдпрдХреНрддрд┐: IDataErrorInfo
- {
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреНрд░реБрдЯрд┐
- {
- рдкреНрд░рд╛рдкреНрдд
- {
- рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреНрд░реБрдЯрд┐;
- StringBuilder sb = new StringBuilder ();
- рддреНрд░реБрдЯрд┐ = рдпрд╣ [ "рдирд╛рдо" ];
- рдЕрдЧрд░ (рддреНрд░реБрдЯрд┐! = рд╕реНрдЯреНрд░рд┐рдВрдЧред рдЦрд╛рд▓реА)
- sb.AppendLine (рддреНрд░реБрдЯрд┐);
- error = рдпрд╣ [ "рд╕реНрд╡рд░" ;
- рдЕрдЧрд░ (рддреНрд░реБрдЯрд┐! = рд╕реНрдЯреНрд░рд┐рдВрдЧред рдЦрд╛рд▓реА)
- sb.AppendLine (рддреНрд░реБрдЯрд┐);
- рдЕрдЧрд░ ( рд╕реНрдЯреНрд░рд┐рдВрдЧ .IsNullOrEmpty (sb.ToString ()))
- рд░рд┐рдЯрд░реНрди sb.ToString ();
- рд╡рд╛рдкрд╕реА "" ;
- }
- }
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╣ [ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЙрд▓рдо рдирд╛рдо]
- {
- рдкреНрд░рд╛рдкреНрдд
- {
- рд╕реНрд╡рд┐рдЪ (рд╕реНрддрдВрдн рдирд╛рдо)
- {
- рдорд╛рдорд▓рд╛ "рдирд╛рдо" :
- рдпрджрд┐ ( string .IsNullOrEmpty ( рдпрд╣ .Name))
- рд╡рд╛рдкрд╕реА "рдПрдХ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ !!!" ;
- рддреЛрдбрд╝рдирд╛ ;
- рдорд╛рдорд▓рд╛ "Vorname" :
- рдЕрдЧрд░ ( рд╕реНрдЯреНрд░рд┐рдВрдЧ .IsNullOrEmpty ( рдпрд╣ .Vorname))
- рд╡рд╛рдкрд╕реА "рдЕрдВрддрд┐рдо рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ !!!" ;
- рддреЛрдбрд╝рдирд╛ ;
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ :
- рддреЛрдбрд╝рдирд╛ ;
- }
- рд╡рд╛рдкрд╕реА "" ;
- }
- }
- }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдареАрдХ рд╣реИ, рд╣рдордиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╡реНрдпрдХреНрддрд┐ рд╡рд╕реНрддреБ рдХреЗ рдирд╛рдо рдФрд░ рд╡реЛрд░реНрдирдореЗ рдЧреБрдг рдореЗрдВ рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рдпрд╛ рдЕрдВрддрд┐рдо рдирд╛рдо рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЦреИрд░, рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢: рд╣рдо IDataEditObject рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдпрджрд┐ рдЗрдирдкреБрдЯ рдСрдкрд░реЗрд╢рди рдирд┐рд░рд╕реНрдд рд╣реЛрдиреЗ рдкрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдореЗрдВ рдЕрд╡реИрдз рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдбреЗрдЯрд╛ рдЕрдкрдиреА рдореВрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реМрдЯ рдЖрддрд╛ рд╣реИ:
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдВрд╢рд┐рдХ рд╡рд░реНрдЧ рд╡реНрдпрдХреНрддрд┐: IEditableObject
- {
- bool inEdit = false ;
- рд╡реНрдпрдХреНрддрд┐ рдЕрд╕реНрдерд╛рдпреА рд╡реНрдпрдХреНрддрд┐;
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдЖрд░рдВрдн ()
- {
- рдпрджрд┐ (init)
- рд╡рд╛рдкрд╕реА;
- inEdit = true ;
- tempPerson = рдирдпрд╛ рд╡реНрдпрдХреНрддрд┐ ();
- tempPerson.Name = this ред рдирд╛рдо;
- tempPerson.Vorname = this .Vorname;
- }
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рд░рджреНрдж рдХрд░реЗрдВ ()
- {
- рдЕрдЧрд░ (inEdit)
- рд╡рд╛рдкрд╕реА;
- indit = false ;
- рдпрд╣ ред рдирд╛рдо = tempPerson.Name;
- thisред рд╡реЛрд░рдирд╛рдо = tempPerson.Vorname;
- tempPerson = null ;
- }
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рд╕рдорд╛рдкреНрддрд┐ ()
- {
- рдЕрдЧрд░ (inEdit)
- рд╡рд╛рдкрд╕реА;
- indit = false ;
- tempPerson = null ;
- }
- }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдПрдХ рдФрд░ рд▓рд┐рд╕реНрдЯрдкрд░реНрд╕рди рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ, рдЬреЛ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреЙрд▓реЗрдХреНрд╢рди <рдкрд░реНрд╕рди> рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рддрд╛ рд╣реИред рдкрд░реНрд╕рди рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдкрд░реНрд╕реЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЦреИрд░, рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рд╣рдо рддреБрд░рдВрдд рдХрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ ListPerson рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ:
- рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рд▓рд┐рд╕реНрдЯрдкрд░реНрд╕рди: рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреЙрд▓реЗрдХреНрд╢рди <рд╡реНрдпрдХреНрддрд┐>
- {
- рдкрдмреНрд▓рд┐рдХ рд▓рд┐рд╕реНрдЯрдкрд░реНрд╕рди ()
- {
- рдпрд╣ред Add ( рдирдпрд╛ рд╡реНрдпрдХреНрддрд┐)
- {
- рдирд╛рдо = "рдЗрд╡рд╛рдиреЛрд╡" ,
- рд╡реЛрд░реНрдирдореЗ = "рд╕рд░реНрдЧреЗрдИ"
- });
- рдпрд╣ред Add ( рдирдпрд╛ рд╡реНрдпрдХреНрддрд┐)
- {
- рдирд╛рдо = "рдкреЗрдЯреНрд░реЛрд╡" ,
- рд╡реЛрд░реНрдирдореЗ = "рдПрдВрдбреНрд░рдпреВ"
- });
- }
- }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╡рд┐рдВрдбреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ ListPerson рд╕рдВрдЧреНрд░рд╣ рдЬреЛрдбрд╝реЗрдВ:
- < Windowред рд╕реНрд░реЛрдд >
- < dt: ListPerson x: Key = "ListPerson" />
- </ Windowsред рд╕реНрд░реЛрдд >
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдФрд░ рд╣рдо рдЕрдкрдиреА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛ рдХрд╣рд╛рдБ рд╕реНрдерд┐рдд рд╣реИ:
- < DataGrid ItemSource = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реЛрд░реНрд╕ = {StaticResource ListPerson}}" />
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЕрдм DataGrid рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
- < DataGrid.RowValidationRules >
- < DataErrorValidationRule ValidationStep = "UpdatedValue" />
- </ DataGrid.RowValidationRules >
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ: рд╣рдордиреЗ рдбреЗрдЯрд╛рдЧреНрд░рд┐рдб рдирд┐рдпрдо рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рдирдпрд╛ рдирд┐рдпрдо рдЬреЛрдбрд╝рд╛ рд╣реИ рдЬреЛ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрдХреНрддрд┐ рд╡рд╕реНрддреБ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдЬрд╛рдБрдЪрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд╕реНрддреБ рд╕реВрдЪрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ IDRErrorInfo рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред ред рдпрджрд┐ рд╣рд╛рдВ, рддреЛ DataGrid рддреНрд░реБрдЯрд┐ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдЧрд╛ред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рдХрдореА рд╣реИ рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рдм рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ: рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдорд╛рди рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рд╡реЗрд╢ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдПред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдо рдмрдирд╛рдПрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рдеред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рдбреЗрдЯрд╛рдЧреНрд░реЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХ рд╣реА рдХрдВрдЯреЗрдирд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреА рд╣реИред XAML рдХреЛ рдЗрд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗ рдбреЗрдЯрд╛ рдмрд╛рдБрдзрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ DependencyProperty рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ DependencyObject рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░рд╛ рдирдпрд╛ рдирд┐рдпрдо ValidationRule рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдмрд╕ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд ListPersonHelper рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ DependencyObject рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджреЗрддреЗ рд╣реИрдВред рдареАрдХ рд╣реИ, рдмрд╛рдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░реЛред рдЖрдЗрдП рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рджреЗрдЦреЗрдВ:
- рд╡рд░реНрдЧ рдХреЙрд▓рдо: рдЕрдорд╛рдиреНрдпрдХрд░рдг
- {
- рдирд┐рдЬреА ListPersonHelper _ListPerson;
- // рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рд╕рд╣рд╛рдпрдХ рд╣реИ; рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ DependencyProperty рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рдЬрдирддрд╛ рдХреА рд╕реВрдЪреА
- {
- get { рд╡рд╛рдкрд╕реА _ListPerson; }
- рд╕реЗрдЯ {_ListPerson = рдорд╛рди ; }
- }
- // рдбреЗрдЯрд╛ рд╡реИрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдУрд╡рд░рд░рд╛рдЗрдб рд╡реИрд▓рд┐рдбреЗрд╢рдиред рдкрд░рд┐рдгрд╛рдо Validate
- ( рдСрдмреНрдЬреЗрдХреНрдЯ рд╡реИрд▓реНрдпреВ , System.Globalization.CultureInfo cultureInfo)
- {
- рдмрд╛рдЗрдВрдбрдЧреНрд░реБрдк рдмреАрдЬреА = рдмрд╛рдЗрдВрдбрд┐рдВрдЧрдЧреНрд░реБрдк рдХреЗ рд░реВрдк рдореЗрдВ рдореВрд▓реНрдп ;
- рд╡реНрдпрдХреНрддрд┐ рд╡реНрдпрдХреНрддрд┐ = bg.Items [0] рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ ;
- // рдпрджрд┐ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рдорд╛рди рдирд╛рдо рдпрд╛ рдЙрдкрдирд╛рдо рдХреЗ рд╕рд╛рде рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ!
- var result = ListPerson.Items рдореЗрдВ p рд╕реЗ
- рдЬрд╣рд╛рдБ p! = person &&
- (p.Name == person.Name
- || p.Vorname == person.Vorname)
- рдкреА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ ;
- рдЕрдЧрд░ (рдкрд░рд┐рдгрд╛рдоред рдХрд┐рд╕реА рднреА)
- {
- рдирдпрд╛ ValidationResult рд▓реМрдЯрд╛рдПрдБ ( рдЭреВрдард╛ , "рдкрд╣рд▓реЗ рдпрд╛ рдЕрдВрддрд┐рдо рдирд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╣реИ" );
- }
- рд╡рд╛рдкрд╕реА рдорд╛рди редResult.ValidResult;
- }
- }
- // DependencyProperty рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ
- рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рд▓рд┐рд╕реНрдЯрдкрд░реНрд╕рди рд╣реЗрд▓реНрдкрд░: рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдСрдмреНрдЬреЗрдХреНрдЯ
- {
- // рдЖрдк XAML рдореЗрдВ рдЖрдЗрдЯрдо рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ рдмрд╛рдЗрдВрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдкреНрд░реЙрдкрд░реНрдЯреА рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ ListPerson рдЖрдЗрдЯрдо
- {
- get { рд╡рд╛рдкрд╕реА (ListPerson) GetValue (ItemProperty); }
- рд╕реЗрдЯ {SetValue (ItemProperty, value ); }
- }
- рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛рдкреНрд░рдгрд╛рд▓реА
- DependencyProperty.Register
- ( "рдЖрдЗрдЯрдо" ,
- рдЯрд╛рдЗрдкреЛрдлрд╝ (рд▓рд┐рд╕реНрдЯрдкрд░реНрд╕рди),
- рдЯрд╛рдЗрдкреЛрдлрд╝ (рд▓рд┐рд╕реНрдЯрдкрд░реНрд╕рди рд╣реЗрд▓реНрдкрд░),
- рдирдпрд╛ UipropertyMetadata ( рдирд▓ ));
- }
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╡рд┐рдВрдбреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ ListPersonHelper рдЬреЛрдбрд╝реЗрдВред DataGrid рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдкрд░ рдЖрдЗрдЯрдо рдЧреБрдг рд╕реЗрдЯ рдХрд░реЗрдВред ValidationRules рдЯреЗрдмрд▓реНрд╕ рдореЗрдВ, рд╣рдорд╛рд░рд╛ рдирдпрд╛ ColumnValidation рдирд┐рдпрдо рдЬреЛрдбрд╝реЗрдВред рд╣рдо ListPerson рд╕рдВрд╕рд╛рдзрди рдкрд░ ListPerson рдЧреБрдг рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╡рд╣ рд╕рдм рд╣реИ:
- < рд╡рд┐рдВрдбреЛ x: рдХреНрд▓рд╛рд╕ = "DPTest.MainWindow"
- xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/pretation"
- xmlns: x = "http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns: dt = "clr-namespace: DPTest"
- рд╢реАрд░реНрд╖рдХ = "рдореЗрдирд╡рд┐рдВрдбреЛ" рдКрдБрдЪрд╛рдИ = "437" рдЪреМрдбрд╝рд╛рдИ = "684" >
- < Windowред рд╕реНрд░реЛрдд >
- < dt: ListPerson x: Key = "ListPerson" />
- < dt: ListPersonHelper x: Key = "ListPersonHelper"
- рдЖрдЗрдЯрдо = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реЛрд░реНрд╕ = {StaticResource ListPerson}}" />
- < ControlTemplate x: Key = "GridError" >
- < рдЧреНрд░рд┐рдб рдорд╛рд░реНрдЬрд┐рди = "0, -2.0, -2"
- рдЯреВрд▓рдЯрд┐рдк = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд░рд┐рд▓реЗрдЯрд┐рд╡рд╕реЛрд░реНрд╕ = {рд░рд┐рд▓реЗрдЯрд┐рд╡рд╕реЛрд░реНрд╕
FindAncestor, AncestorType = {x: рдЯрд╛рдЗрдк рдХрд░реЗрдВ DataGridRow}},
рдкрд╛рде = (рдорд╛рдиреНрдпрддрд╛ред рдПрд░рд┐рдпрд░) [0]ред рдИрдпрд░ рдХреЙрдиреНрдЯреЗрдВрдЯ} "
>- < рджреАрд░реНрдШрд╡реГрддреНрддреАрдпрддрд╛ = "0" рднрд░реЗрдВ = "рд▓рд╛рд▓"
- рдЪреМрдбрд╝рд╛рдИ = "{рдЯреЗрдореНрдкреНрд▓реЗрдЯрдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдлреЙрдиреНрдЯрд╕рд╛рдЗрдЬрд╝}"
- рдКрдБрдЪрд╛рдИ = "{рдЯреЗрдореНрдкреНрд▓реЗрдЯрдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдлрд╝реЙрдиреНрдЯ рдЖрдХрд╛рд░"} />
- < TextBlock рдкрд╛рда = "!" FontSize = "{TemplateBinding FontSize}"
- FontWeight = "рдмреЛрд▓реНрдб" рдлрд╝реЛрд░рдЧреНрд░рд╛рдЙрдВрдб = "рд╡реНрд╣рд╛рдЗрдЯ"
- рдХреНрд╖реИрддрд┐рдЬрдХрд░рдг = "рдХреЗрдВрджреНрд░" />
- </ рдЧреНрд░рд┐рдб >
- </ ControlTemplate >
- </ Window.Resources >
- < рдЧреНрд░рд┐рдб >
- < DataGrid ItemSource = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реЛрд░реНрд╕ = {StaticResource ListPerson}}"
- AutoGenerateColumns = "рдЧрд▓рдд"
- RowValidationErrorTemplate = "{StaticResource GridError}" >
- < DataGrid.Columns >
- < DataGridTextColumn
- рдмрдВрдзрди = "{рдмрдВрдзрди рдкрде = рд╕реНрд╡рд░"
- рд╣реЗрдбрд░ = "рд╡реЛрд░реНрдирдореЗ" />
- < DataGridTextColumn
- рдмрдВрдзрди = "{рдмрдВрдзрди рдкрде = рдирд╛рдо}"
- рд╣реЗрдбрд░ = "рдирд╛рдо" />
- </ DataGrid.Columns >
- < DataGrid.RowValidationRules >
- < DataErrorValidationRule
- ValidationStep = "UpdatedValue" />
- < dt: ColumnValidation
- рдорд╛рдиреНрдпрдХрд░рдгрд╕реНрдЯреЗрдк = "UpdatedValue" >
- < dt: ColumnValidation.ListPerson >
- < dt: ListPersonHelper
- рдЖрдЗрдЯрдо = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реЛрд░реНрд╕ = {StaticResource ListPerson}}" />
- </ dt: ColumnValidation.ListPerson >
- </ dt: ColumnValidation >
- </ DataGrid.RowValidationRules >
- </ рдбрд╛рдЯрд╛рдЧреНрд░рд┐рдб >
- </ рдЧреНрд░рд┐рдб >
- </ Window >
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: DataGridColumnValidation.zip (71.37 kb)