我是WPF的新手,我正在尝试使用MVVM模式设计我的第一个项目。
现在我将主窗口作为我的视图。我有一个用户控件。现在用户控件有2个扩展器,每个都需要拉动它自己的数据。
<Expander Header="Electrical Components" Name="EC"
IsExpanded="True">
<ItemsControl ItemsSource="{Binding ElecViewModel.ToolBoxItems }">
............
<Expander Header="Structural Components" Name="SC"
IsExpanded="True">
<ItemsControl ItemsSource="{Binding StructViewModel.ToolBoxItemsS}">
.............
所以我创建了2个视图模型,我认为我可以为每个扩展器进行数据绑定。想法是在每个扩展器下面拉一些图像。 第一个扩展器我附加到此视图模型
public class ElecViewModel
{
private List<ToolBoxData> toolBoxItems = new List<ToolBoxData>();
public ElecViewModel()
{
toolBoxItems.Add(new ToolBoxData("../Images/Inverter.jpg", typeof(InverterDesignerItemViewModel)));
toolBoxItems.Add(new ToolBoxData("../Images/Recombiner.jpg", typeof(RecombinerDesignerItemViewModel)));
}
public List<ToolBoxData> ToolBoxItems
{
get { return toolBoxItems; }
}
}
..第二个是这个视图模型
public class StructViewModel
{
private List<ToolBoxData> toolBoxItemsS = new List<ToolBoxData>();
public StructViewModel()
{
toolBoxItemsS.Add(new ToolBoxData("../Images/SafetySwitch.jpg", typeof(SafetySwitchDesignerItemViewModel)));
toolBoxItemsS.Add(new ToolBoxData("../Images/ScadaPanel.jpg", typeof(ScadaDesignerItemViewModel)));
}
public List<ToolBoxData> ToolBoxItemsS
{
get { return toolBoxItemsS; }
}
}
现在我的第一个扩展器正在加载正确的图像。而第二个扩展器没有。即使我像第一个列表一样绑定了它,第二个视图模型的公共列表也不会被击中?是否有一个明显的原因?我尝试将第二个扩展器的绑定源设置为第一个列表并填充它,表明我为第二个扩展器创建的列表在绑定到控件时存在一些问题。请建议,因为我无法确定任何明显的问题。
答案 0 :(得分:1)
在您的情况下,请勿明确设置DataContext
的{{1}}。假设您的usercontrol
具有ViewModel实例MainViewModel
和ElecViewModel
的两个属性。并且StructViewModel
是MainViewModel
的{{1}},您可以绑定这些扩展程序,如
DataContext