1

我有一个用户控件,其中有 4 个组合框绑定到该用户控件的视图模型中的集合。

我以 wpf 形式使用了这个控件。这个 wpf 表单有自己的视图模型。

如何从 wpf 表单的视图模型中的 4 个组合框访问文本?

4

3 回答 3

0

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

  • 您可以使用 messenger 或 eventtaggregator 将 seleteditem 从 usercontrolviewmodel 通信到 mainviewmodel。
  • 您还可以在用户控件中使用 RelativeSource 绑定将选定项直接绑定到您的主视图模型(用户控件只是控件的组合)。
  • 您可以摆脱 usercontrol viewmodel 并将所有内容放入 mainviewmodel 并以我的旧示例
  • 您可以在您的用户控件中为 SelectedItems 创建 DependencyProperties!(不是用户控件视图模型!)并将它们绑定到您的主视图模型中的属性。如果用户控件应该是真正的用户控件,我认为这是最干净的方式。

旧示例:在您的视图模型中://真正的代码当然应该实现INotifyPropertyChanged并正确提升它

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

 public string MySelectedCombobox1Value {get;set;}

在您的用户控件中:

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

这一切都与你的问题有关。确保您设置DataContext正确。您可以使用 snoop 等工具进行检查。我发布的代码预计组合框的数据连接是视图模型。

于 2012-07-20T06:24:50.653 回答
0

唯一干净的方法是使用绑定,唯一推荐的方法是用户控件公开DependencyPropertyViewModel 或单个文本属性(如 sellmeadog 建议的那样)以供使用。然后,您可以在父 ViewModel 中拥有一个直接绑定到该依赖属性的属性。

于 2012-07-19T21:55:08.073 回答
0

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

更新

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

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

于 2012-07-19T21:02:34.003 回答