您的位置:首页 > 其它

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);    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: