#wpf #binding #viewmodel
#wpf #привязка #viewmodel
Вопрос:
Просто пример. Пользовательский контроллер имеет ViewModel со свойством, называемым «Test»
Как я мог бы привязать текстовое поле к этому конкретному свойству? Можете ли вы получить доступ к ViewModel братьев и сестер?
<TextBox Text="{Binding ElementName=myControl, Path=ViewModel.Test}"></TextBox>
<Controls:CustomControl x:Name="myControl" />
Комментарии:
1. Действительно ли у вашего CustomControl есть свойство зависимости , называемое ViewModel?
2. не обязательно должно быть свойством зависимости @Хенк Холтерман
3. Нет, этого не произошло, добавление к нему DP заставило его работать!
4. Я имею в виду, что это могло бы быть и обычным свойством, в этом случае элемент управления должен был бы реализовать INotifyPropertyChanged однако все это не нужно, когда вы уже можете привязаться к свойству DataContext
Ответ №1:
Родственные ViewModel были бы в его DataContext try
<TextBox Text="{Binding ElementName=myControl, Path=DataContext.Test}"></TextBox>
<Controls:CustomControl x:Name="myControl" />
Комментарии:
1. Потрясающе, спасибо за помощь, это позволило мне сделать это, оставив ViewModel закрытым и не имея DP.
2. Этот способ позволяет чередовать две разные ViewModels, в том числе в одной строке, и без создания нескольких экземпляров ViewModels
Ответ №2:
Может быть, это то, что вам требовалось-
<TextBox Text="{Binding Source={x:Static local:VieModel}, Path=Test}"></TextBox>
<Controls:CustomControl x:Name="myControl" />
Не забудьте добавить расширение разметки, чтобы включить пространство имен, в котором существует ваш класс Viewmodel — xmlns:local="clr-namespace:ViewModel NameSpace"