рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ
рдмрд┐рдЬреАрдЗрдВрдбрд┐рдПрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ
рдХрд░рдиреЗ рд╕реЗ рд╕реБрдЦрдж (рдкреНрд░реЛрд╕реЗрд╕ рдЗрдВрдбрд┐рдХреЗрд╢рди) рдФрд░ рдЙрдкрдпреЛрдЧреА (рдХрдВрдЯреНрд░реЛрд▓ рдмреНрд▓реЙрдХрд┐рдВрдЧ) рдЧреБрдг рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ
рдЖрдПрдВрдЧреЗ ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдЗрд╕реЗ рдЪрд╛рд▓реВ / рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде, рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди
рдПрдорд╡реАрд╡реАрдПрдо рдореЙрдбрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╢рд░реАрд░ рдЖрдВрджреЛрд▓рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЧрд░
BusyIndicator
рдлреЙрд░реНрдо рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рддрд╛рдХрд┐ рдореБрдЭреЗ рдХреЛрдб рдХреА рдПрдХ рднреА рдкрдВрдХреНрддрд┐ рди рд▓рд┐рдЦрдиреА рдкрдбрд╝реЗред рддреЛ:
рд╕рдорд╕реНрдпрд╛ рдХрдерди:- рдХрд┐рд╕реА рднреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдВрдХреЗрдд рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ
ItemsSource
рд╕реНрд░реЛрдд рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред - рдПрдХ рд╕рдВрдХреЗрдд рдЬреЛ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣
ItemsSource
рдХрд╛ рдПрдХ рд╢реВрдиреНрдп рдорд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред BusyIndicator
рд░реВрдк рдореЗрдВ BusyIndicator
рдЖрдк рдХрд┐рд╕реА рднреА рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдХреЗрд╡рд▓ рдЙрд╕рдХреЗ рдкрд╛рд╕ boolean
рд╕рдВрдкрддреНрддрд┐ IsBusy
ред- рдлреЙрд░реНрдо рдХреЗ рджреГрд╢реНрдп рдореЗрдВ рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдбрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ XAML рдХреЛрдб рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
<BusyIndicator ...> <ListBox ItemsSource="{Binding DataList, IsAsync=true}" ...> ... </ListBox> <BusyIndicator>
IsAsync=true
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ
IsAsync=true
рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рддрд░реНрдХ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдбреЗрдЯрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХреЗ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдПрдХ рд╕рдВрдХреЗрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдПрдХ рдареЛрд╕ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдлреНрд░реАрдЬ рд╣реЛ рдЬрд╛рдП, рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╣рдорд╛рд░рд╛ рд╕рдм рдХреБрдЫ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдЦрд░реНрдЪ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ: XAML рдореЗрдВ рдФрд░ ViewModel рдХреЛрдб рдореЗрдВ IsAsync = true:
private IEnumerable _dataList = null; public IEnumerable DataList { get { if (_dataList == null) _dataList = Model.GetDataList(...); return _dataList; } private set { if (_dataList == value) return; _dataList = value; NotifyPropertyChanged("DataList"); } } public void RefreshDataList() { DataList = null; }
рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдореЗрд░реЗ рд╕рд╛рде рд╣реБрдИ (рдФрд░ рдпрд╣ рджреГрд╖реНрдЯрд┐рдЧреЛрдЪрд░ рднреА рд╣реБрдИ) рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдерд╛:
<BusyIndicator IsBusy="{Binding DataList, IsAsync=true, Converter={StaticResource NullToBool}"> <ListBox ItemsSource="{Binding DataList, IsAsync=true}" ...> ... </ListBox> <BusyIndicator>
рднрд▓рд╛, рдЗрд╕ рдХреЛрдб рдХреА рддреБрд░рдВрдд рдЖрд▓реЛрдЪрдирд╛ рдХреМрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ?рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рднреА рдЙрд╕реЗ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдбрд┐рдмрдЧрд┐рдВрдЧ рдиреЗ рдореЗрд░реА рдЪрд┐рдВрддрд╛рдУрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА: рд╕реВрдЪреА рдХреЛ рджреЛ рдмрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ -
BusyIndicator
рдФрд░ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдПред
"рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛!" рдореИрдВрдиреЗ рдХрд╣рд╛, рдФрд░ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджрд┐рдпрд╛:
private object _dataListSync = new nbject(); private IEnumerable _dataList = null; public IEnumerable DataList { get { lock (_dataListSync) { if (_dataList == null) _dataList = Model.GetDataList(...); return _dataList; } } }
рдЕрдм рдбреЗрдЯрд╛ рдПрдХ рдмрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╕рдм рдХреБрдЫ рдЗрд░рд╛рджрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рддрд░реАрдХрд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдпрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдХрдирд╡рд░реНрдЯрд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рджреВрд╕рд░реЗ, рдХрд╛рдлреА рд╕рдорд╛рди
рдмрдХреНрдл рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП , рд╕реВрдЪреА рдФрд░ рд╕рдВрдХреЗрддрдХ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рднреВрд▓рдирд╛, рдЕрдЧрд░ рдЕрдЪрд╛рдирдХ рдХреБрдЫ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреАрд╕рд░рд╛, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдВрдХреЗрддрдХ рдХреЗ рд▓рд┐рдП рдПрдХ
DataList
рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
рд╣рдореЗрд╢рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ
рд╕реЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП
DataList
ред
рдЕрдЧрд▓рд╛ рд╡рд┐рдЪрд╛рд░
attached property
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ред
рдЕрдм рддрдХ, рдореБрдЭреЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕рдордЭрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ
, рдореИрдВ
рдЖрдкрдХреЛ рдЬреЛ рдХреБрдЫ рднреА рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдХрджрдо-рджрд░-рдХрджрдо рдмрддрд╛рдКрдВрдЧрд╛ред
рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рджред