Growman
@Growman
Wannabe Linux Admin

Как отредактировать элемент списка в WPF?

Приветствую.
Есть WPF форма, на ней список
<ListView x:Name="FilmListView" 
                  ItemsSource="{Binding Path=FilmList}" 
                  ItemTemplate="{StaticResource FilmView}"
                  SelectedItem="{Binding Path=SelectedFilm, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"
                  IsSynchronizedWithCurrentItem="True"/>

список привязан к ObservableCollection из объектов QFilm, с какими-то там полями базовых типов.
Начал делать поля для редактирования свойств.
<WrapPanel>
          <TextBlock Text="Name: " />
          <TextBlock Text="{Binding Path=SelectedFilm.Name, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
</WrapPanel>

<WrapPanel>
          <TextBlock Text="Name: " />
          <TextBox Text="{Binding Path=EditFilm.Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</WrapPanel>

Т.е. при выделении строки в списке соответствующий объект помещается в SelectedFilm. EditFilm должен как-то получить данные из этого объекта и по команде "сохранить" скопировать их обратно.
Не получается. События GUI использовать нельзя, ибо MVVM.
Пытался подписать EditFilm.Copy(SelectedFilm) через выделенный метод на SelectionFilm.PropertyChanged - не помогло, т.к. при смене выделения не срабатывает это событие (у QFilm реализован INPC и метод Copy, напрямую присваивающий свойства в обход Notify интерфейса).
Что делать? Обычно пытаюсь сам разобраться, но тут - ступор и непонятно куда рыть. Архитектурная, так-сказать, проблемка.
И, да, хотелось бы без использования сторонних библиотек и проч. Уверен есть до идиотизма простое решение, но я его просто в упор не вижу.
  • Вопрос задан
  • 999 просмотров
Решения вопроса 1
hePPer
@hePPer
Есть два варианта, первый, это редактирование SelectedFilm напрямую (мне кажется оптимальный вариант - вы его изменяете, кнопкой Сохранить применяете изменения),
и второй связать SelectedFilm и EditFilm.
Если SelectedFilm и EditFilm у вас определено во вьюмодели, то нужно добавить перенос ссылки SelectedFilm в EditFilm и обратно, после изменения. Например, изменился выбранный элемент, вьюмодель копирует ссылку на него в EditFilm. Жмете кнопку сохранить, данные из EditFilm копируются в выбранный элемент, а EditFilm обнуляется.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы