SL - 总结 - AutoCompleteSelector
2013-12-11 16:10
113 查看
/// <summary> /// 1.0.6 /// </summary> public abstract class AutoCompleteSelector : AutoCompleteBox { private IAutoCompleteSelectorDataProvider dataProvider;
private bool allowSearch = false;
public AutoCompleteSelector(IAutoCompleteSelectorDataProvider dataProvider) { this.dataProvider = dataProvider; this.Loaded += new RoutedEventHandler(AutoCompleteSelectorLoaded); }
protected abstract IDictionary<string, object> GetParameters();
void AutoCompleteSelectorLoaded(object sender, RoutedEventArgs e) { this.KeyDown += new KeyEventHandler(AutoCompleteSelector_KeyDown); this.KeyUp += new KeyEventHandler(AutoCompleteSelector_KeyUp); this.TextChanged += new RoutedEventHandler(AutoCompleteSelectorTextChanged); this.SelectionChanged += new SelectionChangedEventHandler(AutoCompleteSelectorSelectionChanged);
this.ItemsSource = new ObservableCollection<string>(); }
void AutoCompleteSelector_KeyUp(object sender, KeyEventArgs e) { timeCount = 3;
if (allowSearch) { if (!isRunning) { thread = new Thread(new ThreadStart(ThreadProcess)); thread.Start(); } } }
void AutoCompleteSelector_KeyDown(object sender, KeyEventArgs e) { allowSearch = true; this.SelectedItem = null; }
void AutoCompleteSelectorTextChanged(object sender, RoutedEventArgs e) { }
void AutoCompleteSelectorSelectionChanged(object sender, SelectionChangedEventArgs e) { allowSearch = false; }
private bool isRunning; private int timeCount = 0; private Thread thread;
private void ThreadProcess() { isRunning = true; while (timeCount != 0) { timeCount--; Thread.Sleep(100); }
this.Dispatcher.BeginInvoke(new Action(() => { dataProvider.SearchData(this.Text, GetParameters(), (result) => { var tempItems = this.ItemsSource as ObservableCollection<string>; tempItems.Clear(); if (result != null) { foreach (var item in result) { tempItems.Add(item); } } this.PopulateComplete(); }); }));
isRunning = false; } }
public interface IAutoCompleteSelectorDataProvider { void SearchData(string text, IDictionary<string, object> paramaters, Action<ObservableCollection<string>> callback); }
private bool allowSearch = false;
public AutoCompleteSelector(IAutoCompleteSelectorDataProvider dataProvider) { this.dataProvider = dataProvider; this.Loaded += new RoutedEventHandler(AutoCompleteSelectorLoaded); }
protected abstract IDictionary<string, object> GetParameters();
void AutoCompleteSelectorLoaded(object sender, RoutedEventArgs e) { this.KeyDown += new KeyEventHandler(AutoCompleteSelector_KeyDown); this.KeyUp += new KeyEventHandler(AutoCompleteSelector_KeyUp); this.TextChanged += new RoutedEventHandler(AutoCompleteSelectorTextChanged); this.SelectionChanged += new SelectionChangedEventHandler(AutoCompleteSelectorSelectionChanged);
this.ItemsSource = new ObservableCollection<string>(); }
void AutoCompleteSelector_KeyUp(object sender, KeyEventArgs e) { timeCount = 3;
if (allowSearch) { if (!isRunning) { thread = new Thread(new ThreadStart(ThreadProcess)); thread.Start(); } } }
void AutoCompleteSelector_KeyDown(object sender, KeyEventArgs e) { allowSearch = true; this.SelectedItem = null; }
void AutoCompleteSelectorTextChanged(object sender, RoutedEventArgs e) { }
void AutoCompleteSelectorSelectionChanged(object sender, SelectionChangedEventArgs e) { allowSearch = false; }
private bool isRunning; private int timeCount = 0; private Thread thread;
private void ThreadProcess() { isRunning = true; while (timeCount != 0) { timeCount--; Thread.Sleep(100); }
this.Dispatcher.BeginInvoke(new Action(() => { dataProvider.SearchData(this.Text, GetParameters(), (result) => { var tempItems = this.ItemsSource as ObservableCollection<string>; tempItems.Clear(); if (result != null) { foreach (var item in result) { tempItems.Add(item); } } this.PopulateComplete(); }); }));
isRunning = false; } }
public interface IAutoCompleteSelectorDataProvider { void SearchData(string text, IDictionary<string, object> paramaters, Action<ObservableCollection<string>> callback); }
相关文章推荐
- SL - 总结 - DataSelectorByLookupWindow
- MDK在链接时提示空间不够(No space in execution regions with .ANY selector... )的解决方案总结
- iphone 线程总结— detachNewThreadSelector的使用
- IOS SEL (@selector) 原理及使用总结(二)
- IOS SEL (@selector) 原理及使用总结(一)
- IOS SEL (@selector) 原理及使用总结(一)
- IOS SEL (@selector) 原理及使用总结(一)
- Android中的Selector的使用总结
- MDK在链接时提示空间不够(No space in execution regions with .ANY selector... )的解决方案总结
- IOS SEL (@selector) 原理及使用总结(一)
- IOS SEL (@selector) 原理及使用总结(一)
- IOS SEL (@selector) 原理及使用总结(一)
- IOS SEL (@selector) 原理及使用总结(一)
- IOS SEL (@selector) 原理及使用总结(二)
- [学习记号 - SL其他] Silverlight资源引用路径总结
- AJAX扩展控件AutoComplete(自动提示功能)的使用方法总结
- IOS SEL (@selector) 原理及使用总结(二)
- IOS SEL (@selector) 原理及使用总结(二)
- android中shape,selector,layer-list用法总结