【发布时间】:2012-07-26 12:25:56
【问题描述】:
我有一个带有他自己的 ViewModel 的 UserControl(AutoComplete)。当我在窗口内使用 UserControl 时,它运行良好、连接到服务并正确绘制数据。 UserControl 数据上下文通过 xaml 设置,并绑定到主窗口 viewModel 的属性。
好的,现在我希望 UserControl 可以从主窗口视图模型加载数据。问题是,假设用户控件加载国家。当我输入用户控件时,它返回国家列表,当我选择其中一个国家时,即“西班牙”,用户控件的 SelectedItem 属性更新为“西班牙”。我希望主窗口视图模型中的一个对象更新为“西班牙”,反之亦然,如果我在主窗口视图模型中更新国家对象,用户的选定项也应该更新。
我怎样才能做到这一点
我的主视图中有这个:
<amctrls:AmAutoCompleteView DataContext="{Binding controladorAutoCompleteCountry}" />
用户控件看起来像这样:
<telerik:RadComboBox Margin="2,0,0,0" Grid.Row="0" Grid.Column="0"
IsEditable="True"
Name="RadCbo"
ItemsSource="{Binding objectList}"
DisplayMemberPath="{Binding fieldToShow}"
OpenDropDownOnFocus="True"
SelectedItem="{Binding selectedCountry, Mode=TwoWay}"
Text="{Binding searchText, Mode=TwoWay}"
IsTextSearchEnabled="False"
StaysOpenOnEdit="True" />
controladorAutoCompleteCountry 是我的主视图的一个属性,它是用户控件视图模型的一个实例。
主视图的视图模型管理地址,我想要的是将地址国家绑定到用户控件以编辑地址。如果我将用户控件绑定到其控制器的实例,如何绑定地址的 Country 对象?
【问题讨论】:
-
你能发布一些代码吗?理想情况下,您的 xaml 标记的简化版本仅包含相关绑定等。此外,MainViewModel 仅包含相关属性等。
-
据我了解,您有一个带有组合框的视图
BetaView,该组合框已加载到视图AlphaView中。但是,您想将 BetaView-combobox 绑定到 BetaViewModel 和 AlphaViewModel 属性吗? -
是的,但每个视图的数据上下文不同,主视图有自己的视图模型,用户控件有自己的。我这样做是因为用户控件有自己的行为,但它操作的数据应该会影响主视图上下文中的数据。 (地址所在的国家/地区)。 Mybe这不是正确的方法......
标签: wpf mvvm view user-controls