Как заставить список файлов показывать только некоторые из файлов, приложенных к карточке
Как заставить список файлов показывать только некоторые из файлов, приложенных к карточке¶
Если необходимо скрыть из списка файлов некоторые файлы, например определённой категории, необходимо воспользоваться расширением CardUIExtension. Ниже приведён код расширения, который обслуживает два файловых контрола. Один из них отображает все файлы, кроме тех, которые относятся к категории “Image”, а второй только файлы этой категории.
Расширение срабатывает при инициализации интерфейса карточки и делает следующее:
-
Получаем FileControl’ы.
-
Удаляем из полученных ранее контролов лишние файлы из коллекции Files.
-
Добавляем обработчик IFileControl.ContainerFileAdding, в котором указываем e.Cancel = true, если файл не должен быть виден в контроле.
public sealed class CarFileControlFilterImagesUIExtension : CardUIExtension
{
#region Constants
private const string ImageFileCategoryName = "Image";
private const string AllFilesControlAlias = "AllFilesControl";
private const string ImageFilesControlAlias = "ImageFilesControl";
#endregion
#region Base Overrides
public override void Initialized(ICardUIExtensionContext context)
{
// Находим carCardModeldModel
var cardModel = context.Model;
IControlViewModel allFilesControlViewModel;
IControlViewModel imageFilesControlViewModel;
if (cardModel == null ||
!cardModel.Controls.TryGet(AllFilesControlAlias, out allFilesControlViewModel) ||
!cardModel.Controls.TryGet(ImageFilesControlAlias, out imageFilesControlViewModel))
{
return;
}
var allFilesFileControl = ((FileListViewModel) allFilesControlViewModel).FileControl;
var imageFilesFileControl = ((FileListViewModel)imageFilesControlViewModel).FileControl;
// Удаляем изображения из контрола - со всеми файлами, кроме изображений
for (int i = allFilesFileControl.Files.Count - 1; i > -1; i--)
{
var item = allFilesFileControl.Files[i];
if (item.Category != null && item.Category.Caption == ImageFileCategoryName)
{
allFilesFileControl.Files.RemoveAt(i);
}
}
// Удаляем лишние файлы из контрола - с изображениями
for (int i = imageFilesFileControl.Files.Count - 1; i > -1; i--)
{
var item = imageFilesFileControl.Files[i];
if (item.Category == null ||
item.Category.Caption != ImageFileCategoryName)
{
imageFilesFileControl.Files.RemoveAt(i);
}
}
// Подписываемся на изменения контейнеров
imageFilesFileControl.ContainerFileAdding += imageFilesFileControl_ContainerFileAdding;
allFilesFileControl.ContainerFileAdding += allFilesFileControl_ContainerFileAdding;
}
#endregion
#region Event Handlers
private void imageFilesFileControl_ContainerFileAdding(object sender, FileControlCancelEventArgs e)
{
{
if (e.File.Category == null ||
e.File.Category.Caption != ImageFileCategoryName)
{
e.Cancel = true;
}
}
}
private void allFilesFileControl_ContainerFileAdding(object sender, FileControlCancelEventArgs e)
{
{
if (e.File.Category != null &&
e.File.Category.Caption == ImageFileCategoryName)
{
e.Cancel = true;
}
}
}
#endregion
}