locked
listView странно работает RRS feed

  • Вопрос

  • качаю циклом картинки из

    интернета в ObservableCollection<FileItem(состоит из нескольких строк и картинки)> ItemsMassive, а массив использую как listView.ItemsSource = ItemsMassive

    вот XAML 

    <Image Grid.Column="0" 
                                           Width="50"
                                           Margin="3"
                                           HorizontalAlignment="Stretch" 
                                           VerticalAlignment="Stretch" 
                                           Source="{Binding Icon}"/>
                                    <StackPanel Orientation="Vertical" 
                                                Grid.Column="1"
                                                VerticalAlignment="Center">
                                        <TextBlock    
                                               Text="{Binding Name}" 
                                               HorizontalAlignment="Left" 
                                               FontFamily="Arial"/>
                                        <TextBlock  
                                               Text="{Binding Date}"  
                                               HorizontalAlignment="Left" 
                                               FontFamily="Arial"
                                               FontSize="12" Foreground="#CCFFD668"/>

    получается обычная привязка, но почему-то некоторые картинки не отображаются(каждый раз по разному)

    28 августа 2017 г. 21:07

Ответы

  • Если не первое и не второе, то проблема в этом...

    Да, все правильно, у вас не реализовано уведомление пользовательского интерфейса о изменении свойств. Зачем это нужно и как это можно сделать смотрите здесь.
    4 сентября 2017 г. 5:23
    Отвечающий

Все ответы

  • Добрый день.

    FileItem является потомком DependencyObject и Icon у него как DependencyProperty или класс потомок INotifyPropertyChanged и при присвоении иконки вы вызываете PropertyChanged? Если не первое и не второе, то проблема в этом...

    30 августа 2017 г. 6:44
    Отвечающий
  •     public class FileItem
        {
            public string Icon { get; set; }
            public string Name { get; set; }
            public string Date { get; set; }
            public string Size { get; set; }
            public string Path { get; set; }
            public string Public_URL { get; set; }
            public string PublicICON { get; set; }
            public string Type { get; set; }
            public int Tag { get; set; }
            private string Token = "";
            private HttpClient cli = new HttpClient();
    
    
            public FileItem(string type,
                            string name,
                            string date,
                            double size,
                            string path,
                            string public_url,
                            int tag,
                            Uri iconUri,
                            string token)
            {
                this.Name = name;
                this.Token = token;
                this.Public_URL = public_url;
                if (Public_URL != null)
                {
                    PublicICON = "";//значек означающий опубликован файл или нет
                }
                else
                {
                    PublicICON = " ";
                }
                if (size == 0)
                    type = "dir";
                else
                    this.Type = type;
                if (type == "dir")
                {
                    this.Type = type;
                    this.Icon = "ms-appx:///Assets/icons/folder.png";
                }
                else if (type == "video")
                {
                    IconDownload(iconUri);
                }
                else if (type == "image")
                {
                    IconDownload(iconUri);
                }
                else if (type == "compressed")
                {
                    this.Icon = "ms-appx:///Assets/icons/compressed.png";
                }
                else
                {
                    this.Icon = "ms-appx:///Assets/icons/file.png";
                }
                this.Date = date;
                this.Size = "" + (int)size / 1000000 + " Мб";
                this.Path = path;
                this.Tag = tag;
            }
            private async void IconDownload(Uri uri)
            {
                StorageFile file = null;
                StorageFolder fold = await ApplicationData.Current.LocalFolder.CreateFolderAsync("previews", CreationCollisionOption.OpenIfExists);
                try
                {
                    file = await fold.CreateFileAsync(this.Name + ".jpg");
                    DownloadOperation downloadOperation = null;
                    BackgroundDownloader Downloader = new BackgroundDownloader();
                    Downloader.SetRequestHeader("Authorization", this.Token);
    
                    downloadOperation = Downloader.CreateDownload(uri, file);
                    await downloadOperation.StartAsync();
                    Icon = file.Path;
                }
                catch
                {
                    file = await fold.GetFileAsync(this.Name + ".jpg");
                    Icon = file.Path;
                }
            }
        }
    }
    Вот код класса. Думаю стоило его изначально прикрепить
    1 сентября 2017 г. 16:40
  • Если не первое и не второе, то проблема в этом...

    Да, все правильно, у вас не реализовано уведомление пользовательского интерфейса о изменении свойств. Зачем это нужно и как это можно сделать смотрите здесь.
    4 сентября 2017 г. 5:23
    Отвечающий