【发布时间】:2010-06-04 08:57:08
【问题描述】:
我有一个 wpf 应用程序,它在您浏览系统时显示 5 个不同的用户控件。每个用户控件上都有一个列表框。所以我想选择一个项目并将其传递回 MainViewModel。我现在让它工作,以便我可以在 ViewModelBase 中存储一个值,但似乎我调用用户控件的策略是有缺陷的,因为我无法链接到每个单独的 ViewModel,而只能链接到 ViewModelBase。我知道我哪里出错了,但我想知道有没有办法通过单独初始化每个用户控件来做到这一点,而不仅仅是像我在这里所做的那样关闭 viewModelBase:
private ViewModelBase _control;
public ViewModelBase Control
{
get { return _control; }
set
{
_control = value;
OnPropertyChanged("Control");
}
}
然后我说加载完毕
Control = new MainScreenViewModel();
ynd = new YesNoDelegate(YesNoNavigation);
Control.SetReturnData(ynd);
Control.name = "MainScreen";
然后在 xaml 中调用控件
<ContentControl Content="{Binding Control}" Height="350" Width="525" Grid.Column="1"/>
任何帮助将不胜感激。
谢谢。
【问题讨论】:
-
我不知道是不是只有我一个人不理解你的设计。但是你能清楚地解释你的设计吗?这是什么意思:
So i want to select an item and pass it back to MainViewModel。您想选择一个 ListBoxItem 吗?所有的用户控件和主视图是否共享相同的数据上下文? -
好吧,基本上我每个用户控件都有 ViewModel。所以可以说有一个 usercontrol1.xaml 有一个列表框。我的 usercontrol1viewmodel 中有一个 personVariable,我将所选项目存储在那里。现在我想要那个当我点击一个按钮时被传回我的 mainViewModel。当我的 ViewModelBase 中的变量(我有权发送委托)“ynd = new yesnodelegate(yesNoNavigation); Control.SetReturnData(Ynd);”时有效这个 setReturnData 方法在 ViewModelBase 中,但我希望它在 Usercontrol1ViewModel 中,但它不会访问它。很抱歉造成混淆。我还在学习 MVVM