Как сделать STRUCT для отслеживания некоторых элементов дерева и списка? - PullRequest
3 голосов
/ 15 сентября 2011

У меня есть TreeView и 2 ListView в моей программе.

Представьте себе следующее изображение:

enter image description here

Первый вид дерева заполняется некоторыми файлами XML.свойство text этого файла - имя файла (без ext), а его тег - путь к файлу.

Если пользователь щелкнет по любому из TreeNodes, ListView в середине будет заполнен некоторыми данными в пределах нажатойXML-файл, и если пользователь щелкает по ним, последний ListView также будет заполнен данными в этой части XML-файла.

Теперь мой вопрос: я уже создал контекстное меню для последнего ListView, поэтомуесли пользователь щелкает правой кнопкой мыши по элементу, он может выбрать этот значок, чтобы добавить его в список игнорируемых.Проблема в том, что я не знаю, как создать этот список игнорирования, поэтому, если он / она переходит к другому файлу и делает что-то еще, и когда он / она возвращается к этому TreeNode / ListView, к которому он / она уже добавил "Pin"список игнорирования ( Здесь все снова будет восстанавливаться ), что пин-код не отображается в списке.(Обратите внимание, что я не хочу ничего удалять из файлов xml!)

Пожалуйста, дайте мне знать, если вопрос не ЧИСТ!enter image description here

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011

Один из способов сделать это - создать класс, который может отслеживать игнорируемую информацию.Что-то вроде:

public struct PinInformation
{
     private readonly string testBatch;
     private readonly string vIGroup;

     public PinInformation(string testBatch, string vIGroup)
     {
          this.testBatch = testBatch;
          this.vIGroup = vIGroup;
     }

     public string TestBatch { get { return this.testBatch; } }
     public string VIGroup { get { return this.vIGroup; } }

     public override bool Equals(object o)
     {
          if (o == null) return false;

          PinInformation info = o as PinInformation;

          if (info == null)
          {
               return false;
          }
          else
          {
               return (this.testBatch == info.testBatch) && (this.vIGroup == info.vIGroup);
          } 

     }
}

Затем вы можете создать Dictionary<PinInformation, List<string>> объект, который отслеживает игнорируемые элементы:

  var ignoreList = new Dictionary<PinInformation, List<string>>();
  ....
  void AddPinToIgnoreList(PinInformation info, string pin)
  {
        if (!ignoreList.ContainsKey(info)) //this is why we override Equals
        {
             ignoreList.Add(info, new List<string>());
        }

        ignoreList[info].Add(pin);
  }

  void RemovePinFromIgnoreList(PinInformation info, string pin)
  {
        ignoreList[info].Remove(pin);
  }

Теперь его просто синхронизироватьэлементы, которые вы показываете в своем пользовательском интерфейсе с информацией, хранящейся в созданной нами системе отслеживания игнорирования.

0 голосов
/ 15 сентября 2011

Создайте что-то подобное или то, что когда-либо будет соответствовать вашим потребностям:

public class IgnoreList
{
 private List<Group> groupsToIgnore = null;
 public List<Group> GroupsToIgnore
 {
   get{return groupsToIgnore;}
 }

 private List<Pin> pinsToIgnore = null;
 public List<Pin> PinsToIgnore
 {
   get{return pinsToIgnore;}
 }

 public IgnoreList()
 {
  groupsToIgnore = new List<Group>();
  pinsToIgnore = new List<Pin>();
 }
}

Теперь вы можете добавить один экземпляр этого класса в каждый TreeViewNode как свойство Tag для хранения списка игнорирования для этого узла.Обработайте событие изменения выбранного узла и выполните фильтрацию списка игнорирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...