private bool Read(string folder, out List <CheckableExtItem> items)
        {
            items = null;
            DirectoryInfo dirInfo = new DirectoryInfo(folder);

            FileInfo[]              fileInfos = dirInfo.GetFiles();
            List <string>           exts      = new List <string>();
            List <CheckableExtItem> extItems  = new List <CheckableExtItem>();

            foreach (FileInfo info in fileInfos)
            {
                string           extension = info.Extension;
                CheckableExtItem extItem;
                int index = extItems.FindIndex(item => item.Extension.Equals(extension));
                if (index < 0)
                {
                    exts.Add(info.Extension);
                    extItem          = new CheckableExtItem(info.Extension);
                    extItem.PathList = new BindingList <string>();
                    extItems.Add(extItem);
                }
                else
                {
                    extItem = extItems[index];
                }
                extItem.PathList.Add(info.FullName);
            }
            items = extItems;
            return(true);
        }
        private void ExtensionSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            bool hasAdded   = e.AddedItems != null && e.AddedItems.Count > 0;
            bool hasRemoved = e.RemovedItems != null && e.RemovedItems.Count > 0;

            if (hasAdded || hasRemoved)
            {
                //Update path list of selected extension
                var pathList = new List <string>();
                foreach (var item in List00.SelectedItems)
                {
                    CheckableExtItem checkable = item as CheckableExtItem;
                    if (checkable != null)
                    {
                        pathList.AddRange(checkable.PathList);
                    }
                }
                List01.ItemsSource = pathList;
            }
        }