如何将在UserControl的组合框中选择的项传递给主窗口ViewModel

本文关键字:ViewModel 窗口 选择 UserControl 组合 | 更新日期: 2023-09-27 18:11:03

我有一个父视图与3个RadioButtons和UserControl MyDataSelectorMyDataSelector由组合框和其他几个简单的控件(复选框,按钮等)。MyDataSelector的ComboBox应该根据父视图上选择的RadioButton填充不同的项。

我在父视图的XAML中使用MyDataSelector:

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

,

  1. InputElement -这是父视图模型中的字符串属性当用户在组合框中选择某些东西时我想要设置的。
  2. childViewModel -这是我的UserControl的ViewModel。
  3. 我使用DependencyProperty:

    定义CurrentSelectedValue
    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的样子:

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

  5. AvailableItems -这是一个ObservableCollection<string>,根据父视图中哪个RadioButton被选中来填充不同的元素。

  6. me这是MyDataSelector的名称UserControl: <UserControl.... x:Name="me">

谁能帮我找出为什么它不工作?我看到AvailableItems的列表被正确加载,我可以在ComboBox中选择任何项目,但InputElement属性的getter或setter在我的父ViewModel中从未被调用,所以我认为绑定有问题:(

如何将在UserControl的组合框中选择的项传递给主窗口ViewModel

你试过Two-Way Binding吗?

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

请参阅Binding。