Атрибут IsSynchronizedWithCurrentItem и текущие обновления элемента

У меня есть модель представления для управления типом диалога, который позволяет фильтровать листинг (при необходимости) и выбирать элемент. Код работает нормально, независимо от того, установил ли я IsSynchronizedWithCurrentItem в true или нет. Насколько я понимаю, это свойство не является истинным по умолчанию в ListView, поэтому яЯ хотел бы лучше понять это свойство.

Вот настройка привязки в представленииs xaml (который работает так же хорошо без установки свойства synch):

    

Модель представления Projects на самом деле представляет собой CollectionViewSource, который поддерживается частной ObservableCollection. Я думаю, что воплотил эту идею в пример проекта Джоша Смитас, но я честно нене помню сейчас. Вот соответствующая часть виртуальной машины, которая относится к привязке xaml:

private ObservableCollection _projectsInternal { get; set; }
public CollectionViewSource Projects { get; set; }

private void _populateProjectListings(IEnumerable openProjects) {
    var listing = (from p in openProjects 
                   orderby p.Code.ToString()
                   select new ProjectViewModel(p)).ToList();

    foreach (var pvm in listing)
            pvm.PropertyChanged += _onProjectViewModelPropertyChanged;

    _projectsInternal = new ObservableCollection(listing);

    Projects = new CollectionViewSource {Source = _projectsInternal};
}

/// Property that is updated via the binding to the view
public ProjectViewModel SelectedProject { get; set; }

Свойство Filter в CollectionViewSource имеет обработчик, который возвращает различные предикаты для элементов модели представления в списке, которые правильно подобраны привязками. Вот суть этого кода (который находится в том же ProjectSelctionViewModel):

    /// Trigger filtering of the  listing.
    public void Filter(bool applyFilter)
    {
        if (applyFilter)
            Projects.Filter += _onFilter;
        else
            Projects.Filter -= _onFilter;

        OnPropertyChanged(vm=>vm.Status);
    }

    private void _onFilter(object sender, FilterEventArgs e)
    {
        var project = e.Item as ProjectViewModel;
        if (project == null) return;

        if (!project.IsMatch_Description(DescriptionText)) e.Accepted = false;
        if (!project.IsMatch_SequenceNumber(SequenceNumberText)) e.Accepted = false;
        if (!project.IsMatch_Prefix(PrefixText)) e.Accepted = false;
        if (!project.IsMatch_Midfix(MidfixText)) e.Accepted = false;
        if (!project.IsAvailable) e.Accepted = false;
    }

Установка режима = TwoWay является избыточной, поскольку ListView 'Привязка SelectedItem является двухсторонней по умолчанию, но я неЯ не возражаю против того, чтобы быть откровенным (я мог бы по-другому относиться к этому, как только я лучше понимаю WPF)

Что с моим кодом делает IsSynchronizedWithCurrentItem = True избыточным?

Я хочу сказать, что это приличный код, но я неМне кажется, что это работает через "магия»Это означает, что я приветствую любые конструктивные отзывы!

Ура,

Berryl

Ответы на вопрос(1)

Ваш ответ на вопрос