Как передать элемент, выбранный в выпадающем списке UserControl, в ViewModel главного окна

#c# #wpf #xaml #mvvm #combobox

#c# #wpf #xaml #mvvm #выпадающий список

Вопрос:

У меня есть родительский вид с 3 радиокнопками и UserControl MyDataSelector . MyDataSelector состоит из выпадающего списка и нескольких других простых элементов управления (флажок, кнопка и т.д.). Выпадающий список MyDataSelector должен быть заполнен разными элементами в зависимости от выбранной кнопки RadioButton в родительском представлении.

Я использую MyDataSelector в XAML моего родительского представления:

 <controls:MyDataSelector CurrentSelectedValue="{Binding InputElement}" DataContext="{Binding childViewModel}" />
  

где

  1. InputElement — это строковое свойство в родительской ViewModel, которое я хочу установить, когда пользователь выбирает что-то в выпадающем списке.
  2. childViewModel — это ViewModel моего UserControl.
  3. Я определил CurrentSelectedValue с помощью DependencyProperty:

     public partial class MyDataSelector: UserControl
    {
          public static readonly DependencyProperty CurrentSelectedValueProperty = DependencyProperty.Register("CurrentSelectedValue", typeof(String), typeof(MyDataSelector));
    
          public string CurrentSelectedValue
          {
               get {return GetValue(CurrentSelectedValueProperty).ToString(); }
               set {SetValue(CurrentSelectedValueProperty, value);
          }
    ....
      
  4. Вот как выглядит выпадающий список в MyDataSelector:

    <ComboBox ItemsSource="{Binding AvailableItems}" SelectedItem="{Binding CurrentSelectedValue, ElementName=me}"/>

  5. AvailableItems — это ObservableCollection<string> который заполняется разными элементами в зависимости от того, какая кнопка RadioButton была отмечена в родительском представлении.

  6. И me это имя MyDataSelector UserControl: <UserControl.... x:Name="me">

Кто-нибудь может помочь мне выяснить, почему это не работает? Я вижу, что список AvailableItems загружен правильно, и я могу выбрать любой элемент в выпадающем списке, но средство получения или установки InputElement свойства в моей родительской ViewModel никогда не вызывается, поэтому, я полагаю, что что-то не так с привязкой:(

Ответ №1:

Вы пробовали Two-Way Binding ?

 <controls:MyDataSelector CurrentSelectedValue="{Binding InputElement, Mode=Two-Way}" 
    DataContext="{Binding childViewModel}" />
  

Пожалуйста, посмотрите на привязку.Страница свойств режима в MSDN для получения дополнительной помощи с этим.