2016-11-18 1 views
0

У меня есть список, который содержит несколько элементов этого класса:Связывание списка <Class> к ListBox

public class Entry { public string FileSize; public string Name; public byte[] Data; public UInt64 XXHashFilePath; public UInt32 FileDataOffset; public UInt32 CompressedSize; public UInt32 UncompressedSize; public CompressionType TypeOfCompression; public UInt64 SHA256; public Entry(BinaryReader br) { XXHashFilePath = br.ReadUInt64(); FileDataOffset = br.ReadUInt32(); CompressedSize = br.ReadUInt32(); UncompressedSize = br.ReadUInt32(); TypeOfCompression = (CompressionType)br.ReadUInt32(); SHA256 = br.ReadUInt64(); FileSize = Functions.SizeSuffix(UncompressedSize); } }

Я хочу мой ListBox для отображения XXHashFilePath, TypeOfCompression, FileSize, имени в колонках в этом конкретном заказ.

+1

Начать чтение здесь: [Данные Шаблонирование Обзор] (https://msdn.microsoft.com/en-us/library/ms742521 (v = vs.110) .aspx). Прежде всего, члены вашего класса должны быть общедоступными, а не полями, для поддержки привязки данных. – Clemens

ответ

0

Вы изменили свои поля на свойства (например, предлагаемые Clemens). Это также принцип ООП с C# https://msdn.microsoft.com/en-us/library/ms229057(v=vs.110).aspx

Кроме того, вы можете захотеть реализовать INotifyPropertyChanged просто необходимо, когда свойства меняют свое значение после добавления записи в коллекцию элементов ListBox. Если элементы Entry неизменяемы и просто добавлены (и удалены) из ListBox, вам не нужно будет внедрять INotifyPropertyChanged.

public class EntryViewModel : ViewModelBase 
{ 
    private string _FileSize; 
    public string FileSize 
    { 
     get 
     { 
      return _FileSize; 
     } 
     set 
     { 
      _FileSize = value; 
      OnPropertyChanged(); 
     } 
    } 
} 

Это также лучшая практика использования шаблона MVVM. Вот простой базовый класс, который должен начать работать без использования MVVM-рамки.

public class ViewModelBase : INotifyPropertyChanged 
{ 
    #region Events 

    public event PropertyChangedEventHandler PropertyChanged; 

    #endregion Events 

    #region Methods 

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    #endregion Methods 
} 
+0

«вам нужно реализовать интерфейс INotifyPropertyChanged, если вы хотите синхронизировать свой вид», необходимо только тогда, когда свойства изменяют свое значение * после того, как * добавлена ​​запись в коллекцию элементов ListBox. Если элементы Entry неизменяемы и просто добавлены (и удалены) из ListBox, вам не нужно будет внедрять INotifyPropertyChanged. – Clemens

+0

@Clemens хорошая точка. Thx для уточнения -> Я добавил ваш комментарий к моему ответу. – Mat

Смежные вопросы