Вопрос: обновить свойство viewmodel из текстового поля, связанного с listview

#wpf #mvvm #properties #binding

#wpf #mvvm #свойства #обязательный

Вопрос:

у меня есть текстовое поле, текст которого привязан к listview selecteditem следующим образом:

 <TextBox x:Name="txtAdditional" Width="300" Text="{Binding ElementName=lstPersons, Path=SelectedItem.Additional, Mode=OneWay}" />
 

Теперь мне нравится реализовывать механизм добавления новых элементов в listview, используя это текстовое поле для получения фактических данных. Поэтому я хотел бы привязать текст текстового поля к свойству viewmodel, чтобы оно могло быть обработано командой.

Таким образом, текст textboxes должен быть привязан к listviews selecteditem и дополнительно к свойству моей viewmodel.

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

То, что я уже нашел:

  1. Использование MultiBindung с каким-то ValueConverter? Поэтому мне кажется, что это основное для отображения, а не для обновления свойства viewmodels.
  2. Использование какого-то самостоятельного пользовательского элемента управления?
  3. Использование BindingProxy с in- и out-dependencyproperties, как в Impossible WPF, часть 1: Свойства привязки?

Есть ли другое, более простое решение для этого, или мне придется использовать одно из вышеперечисленных? И если кто-то должен использовать один из этих подходов, какой из них вы бы выбрали?

Я не могу отделаться от мысли, что над этим вопросом еще не задумывались, используя шаблон mvvm?! 😉

Комментарии:

1. Вы должны добавить свойство, например, SelectedPerson к вашей модели представления. Используйте это свойство в качестве источника привязки для каждого элемента управления, где это необходимо. Например, привязать его к ListView.SelectedItem и к TextBox.Text . Вы всегда должны рассматривать модель представления как единственный источник данных, а не какой-либо другой элемент управления. Данные всегда передаются между control <—> view model, но «никогда» control <—> control. Сначала так думать становится легче.

Ответ №1:

да, благодаря подсказке от BionicCode.

Нам, или, лучше, мне, следовало бы продумать концепцию MVVM. Конечно, нет — или, по крайней мере, как можно меньше кода.

Я добавил свойство «selectedPerson» в свою viewmodel и привязал SelectedItem listview к этому свойству. Таким образом, свойства, связанные с объектом, были доступны непосредственно через «выбранный» объект в моей viewmodel, и больше не было необходимости вообще обращаться к содержимому текстового поля.

Спасибо BionicCode за подсказку!