如何从wpf窗体视图模型访问用户控件中的组合框文本?

时间:2012-07-19 20:55:17

标签: wpf data-binding mvvm user-controls

我有一个带有4个组合框的UserControl绑定到viewmodel中用于该用户控件的集合。

我以wpf格式使用了这个控件。这个wpf表单有自己的viewmodel。

如何从wpf格式的viewmodel中的4个组合框中访问文本?

3 个答案:

答案 0 :(得分:0)

UserControl应该继承您将其添加到视图模型的表单的数据上下文。然后,UserControl中的任何绑定都将相对于继承的数据上下文。您是否尝试将视图模型属性绑定到ComboBox.Text

<强>更新

抱歉,误读了你的问题。没有看到用户控件已经有自己的视图模型。

虽然看起来有更好的方法,但您可以在用户控件上公开依赖项属性,从而公开每个组合框的文本。只是大声思考。

答案 1 :(得分:0)

执行此操作的唯一简洁方法是使用绑定,并且建议的唯一方法是,如果用户控件为ViewModel或单个文本属性(如sellmeadog建议)公开DependencyProperty消费。然后,您可以在父ViewModel中拥有一个直接绑定到该依赖项属性的属性。

答案 2 :(得分:0)

编辑:我看到你有不同的视图模型。现在它取决于你的用户控件的使用和使用mvvm :)

  • 您可以使用messenger或eventaggregator将seilteditems从usercontrolviewmodel发送到mainviewmodel。
  • 您还可以在usercontrol中使用RelativeSource绑定将selecteditem直接绑定到mainviewmodel(usercontrol则只是控件的组合)。
  • 你可以摆脱usercontrol viewmodel并将所有内容放在mainviewmodel中并采用我的旧例子
  • 您可以在usercontrol中为SelectedItems创建DependencyProperties!(而不是usercontrol viewmodel!)并将它们绑定到mainviewmodel中的属性。我认为如果用户控件应该是一个真正的用户控件,这是最干净的方式。

旧例子: 在你的viewmodel://真正的代码当然应该实现INotifyPropertyChanged并正确地提升它

 public ObservableCollection<string> MyFirstCollection {get; set;}//init once, add,remove,clear to alter

 public string MySelectedCombobox1Value {get;set;}
你的usercontrol中的

 <ComboBox ItemsSource="{MyFirstCollection }" SelectedItem="{Binding MySelectedCombobox1Value, Mode=TwoWay}" />

这些都与你的问题有关。请务必将DataContext设置为正确。你可以用像snoop这样的工具来检查。我发布的代码预计组合框的dataconext是viewmodel。