首页 文章

为User Control中的控件设置单独的数据绑定

提问于
浏览
0

我是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; }
    }
}

现在我的第一个扩展器正在加载正确的图像 . 而第二个扩展器没有 . 即使我像第一个列表一样绑定了它,第二个视图模型的公共列表也不会被击中?是否有一个明显的原因?我尝试将第二个扩展器的绑定源设置为第一个列表并填充它,表明我为第二个扩展器创建的列表在绑定到控件时存在一些问题 . 请建议,因为我无法确定任何明显的问题 .

1 回答

  • 1

    在您的情况下,请不要明确设置 usercontrolDataContext . 假设您的 MainViewModel 具有ViewModel实例的两个属性 ElecViewModelStructViewModel . MainViewModel 是你的 WindowDataContext ,你可以绑定这些扩展器就像

    <Expander Header="Electrical Components" Name="EC"
                      IsExpanded="True">
                <ItemsControl ItemsSource="{Binding ElecViewModel.ECData}">
                ............
    <Expander Header="Structural Components" Name="SC"
                      IsExpanded="True">
                <ItemsControl ItemsSource="{Binding StructViewModel.SCData}">
                .............
    

相关问题