List<string> GetImagePaths(string folder) { List<string> filePaths = new List<string>(); try { files = Directory.GetFiles(folder); } catch (DirectoryNotFoundException ex) { } foreach(string file in files) { if (file.ToUpper().EndsWith(".JPG") || file.ToUpper().EndsWith(".PNG") || file.ToUpper().EndsWith(".GIF") || file.ToUpper().EndsWith(".TIF")) { filePaths.Add(file); } } filePaths.TrimExcess(); return filePaths; }
private void UpdateChildren( DataGridContext dataGridContext, TableViewColumnVirtualizationManager columnVirtualizationManager, VirtualizingCellCollection parentRowCells ) { //Prevent reentrance if( m_parentRowCells.AlreadyUpdating ) return; m_parentRowCells.AlreadyUpdating = true; if( dataGridContext == null ) throw new DataGridInternalException( "DataGridContext is null for FixedCellPanel" ); if( columnVirtualizationManager == null ) throw new DataGridInternalException( "ColumnVirtualizationManager is null for FixedCellPanel" ); if( parentRowCells == null ) return; this.ClearPermanentScrollingFieldNames(); List<string> currentFieldsName = new List<string>(); currentFieldsName.AddRange( columnVirtualizationManager.FixedFieldNames ); currentFieldsName.AddRange( columnVirtualizationManager.ScrollingFieldNames ); HashSet<Cell> unusedCells = new HashSet<Cell>( parentRowCells.BindedCells ); //Idenfity the binded cells that aren't needed anymore. foreach( string fieldName in currentFieldsName ) { ColumnBase column = dataGridContext.Columns[ fieldName ]; Cell cell; if( parentRowCells.TryGetCell( column, out cell ) ) { //Certain non recyclable cells like StatCells need their content binding to be updated when they become (or stay) in view. cell.AddContentBinding(); unusedCells.Remove( cell ); } } currentFieldsName.Clear(); currentFieldsName.TrimExcess(); //Release the unused binded cells now in order to minimize the number of cell's creation. foreach( Cell cell in unusedCells ) { bool release = this.CanReleaseCell( cell ); //We move the unused cell into the scrolling panel since there is more chance it will be reused there in the future. this.MoveCellToScrollingPanel( cell, release ); if( release ) { parentRowCells.Release( cell ); } //Since the cell cannot be released, it will not be collapsed. We must keep the field name in order to let the scrolling sub-panel measure and arrange the cell out of view. else { //Certain non recyclable cells like StatCells needs their content binding to be removed when they become out of view. cell.RemoveContentBinding(); this.AddPermanentScrollingFieldNames( cell.FieldName ); } } unusedCells.Clear(); unusedCells.TrimExcess(); //Add the missing cells to the fixed region. foreach( string fieldName in columnVirtualizationManager.FixedFieldNames ) { //The cell is created if it is missing. Cell cell = parentRowCells[ fieldName ]; //Make sure the cell is in the appropriate panel. this.MoveCellToFixedPanel( cell ); } //Add the missing cells to the scrolling region. foreach( string fieldName in columnVirtualizationManager.ScrollingFieldNames ) { //The cell is created if it is missing. Cell cell = parentRowCells[ fieldName ]; //Make sure the cell is in the appropriate panel. this.MoveCellToScrollingPanel( cell ); } if( m_clearUnusedCellsDispatcherOperation == null ) { m_clearUnusedCellsDispatcherOperation = this.Dispatcher.BeginInvoke( new Action( this.ClearUnusedCells ), DispatcherPriority.ApplicationIdle ); } m_fixedPanel.InvalidateMeasure(); m_scrollingCellsDecorator.InvalidateMeasure(); m_scrollingPanel.InvalidateMeasure(); m_parentRowCells.AlreadyUpdating = false; }