WPF многие-многие связывания между списками - PullRequest
2 голосов
/ 25 марта 2011

У меня есть два списка, один для изображений и один для тегов, которые имеют отношение многие-многие.

Оба списка связаны с ObservableCollection объектов EF. В списке тегов также есть столбец с флажком.

Когда я выбираю изображение из списка, я бы хотел, чтобы связанные теги были проверены в другом списке. Мне нужна привязка TwoWay для создания и удаления отношений на основе проверки или нет.

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 26 марта 2011

У меня это работает следующим образом:

  • Я расширил модель тегов, добавив логическое свойство MatchesImage
  • Я установил флажок в списке двух объектов этого свойства
  • Получатель получает CurrentImage и возвращает CurrentImage.Tags.Contains (this)
  • Когда я меняю флажок в установщике свойств, я извлекаю CurrentImage из моей модели представления (мои модели представления являются глобальными ресурсами) и добавляю / удаляю тег из его коллекции тегов на основе значения
  • Я, вероятно, изменю CurrentImage, чтобы он был доступен через хранилище данных вместо viewmodel

Что-то вроде:

public partial class Tag : INotifyPropertyChanged

  public bool MatchesImage {
    get
    {
        Image img = DataRepository.CurrentImage;
        return (img != null) ? this.Images.Contains(img) : false;
    }
    set
    {
        Image img = DataRepository.CurrentImage;
        if (img != null)
        {
            if (value)
                img.Tags.Add(this);
            else
                img.Tags.Remove(this);
            OnPropertyChanged("MatchesImage");
        }
    }
  }
}
0 голосов
/ 25 марта 2011

в вашей виртуальной машине у вас есть два ObservableCollection всех изображений и тегов ... Я думаю, вы можете использовать два других ObservableCollection связанных изображений или тегов, когда вы выбираете изображение, вы можете связать связанные теги с этим ObservableCollection и наоборот.

В другом решении вы можете связать связанные элементы с выбранным элементом ("SelectedItems = {Binding Path = SelectedItem.Tags, ElementName = MyImageListBox}" или что-то в этом роде).

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