C# WPF绑定到字典中的ObserVableCollection

C# WPF绑定到字典中的ObserVableCollection,c#,wpf,C#,Wpf,大家好 我目前的情况: 我有一个可观察的集合(“PipesSystemList”),它由“DataBaseSystem”对象组成: 我成功地将此集合绑定到我的combobox,如下所示,一切都非常完美: 我想要实现的是:因为我有多种设备类型,所以我想在一个地方收集所有必需的装备。所以我创建了一本字典: var SystemTabLists = new Dictionary<string, ObservableCollection<DatabaseSystem>>

大家好

我目前的情况:

  • 我有一个可观察的集合(“PipesSystemList”),它由“DataBaseSystem”对象组成:
  • 我成功地将此集合绑定到我的combobox,如下所示,一切都非常完美:

我想要实现的是:因为我有多种设备类型,所以我想在一个地方收集所有必需的装备。所以我创建了一本字典:

var SystemTabLists = new Dictionary<string, ObservableCollection<DatabaseSystem>>()
{
    {"Document List",new ObservableCollection<DatabaseSystem>()},
    {"Pipes",new ObservableCollection<DatabaseSystem>()},
    {"Valves",new ObservableCollection<DatabaseSystem>()},
    {"Sensors",new ObservableCollection<DatabaseSystem>()},
    {"Vessels",new ObservableCollection<DatabaseSystem>()},
    {"Heat Exchangers",new ObservableCollection<DatabaseSystem>()},
    {"Filters",new ObservableCollection<DatabaseSystem>()},
    {"Other Equipment",new ObservableCollection<DatabaseSystem>()}
};
var SystemTabLists=newdictionary()
{
{“文档列表”,新的ObservableCollection()},
{“Pipes”,新的observeCollection()},
{“Valves”,新的observeCollection()},
{“传感器”,新的ObservableCollection()},
{“Vessers”,新的ObservableCollection()},
{“热交换器”,新的可观测集合(),
{“过滤器”,新的ObservableCollection()},
{“其他设备”,新的ObservableCollection()}
};
在此之后,我尝试将combobox绑定到属于管道的集合(我成功地用正确的元素填充了集合,因此我需要的数据就在那里):


不幸的是,这不起作用。 当我调试代码并启用绑定跟踪时,我收到以下消息: “由于缺少信息,BindingExpression无法检索值。BindingExpression:Path=DataContext.SystemTabLists[Pipes]”

谁能帮帮我我做错了什么?或者指出这是不可能做到的


提前感谢。

使用CompositeCollection和/或DataTemplates,因为这只是我的一个爱好项目。当你说“使用数据模板”时,你的具体意思是什么?我还没有使用它吗?或者不正确?这一切都在一个新的项目中起作用,我刚刚为这个案例抽签出来,这表明你没有分享整个事情。
public class DatabaseSystem
{
    public string System { get; set; }

    public bool IsChecked { get;set;}

}    
<ComboBox ItemsSource="{Binding ElementName=MainView,Path=DataContext.PipesSystemList}" 
          Padding="2" Margin="5 0 5 0" Width="70" Height="20" 
          Foreground ="#F1F1F1" Style="{StaticResource ComboBoxStyleDark}">
    <ComboBox.ItemTemplate>
        <DataTemplate DataType="local:DatabaseSystem">
            <StackPanel Orientation="Horizontal">
                <CheckBox Content="{Binding System}" Foreground="#F1F1F1" 
                          IsChecked="{Binding IsChecked}" 
                          Command="{Binding ElementName=MainView, Path=DataContext.PipeTabChosenSystemChangedCommand }"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>
var SystemTabLists = new Dictionary<string, ObservableCollection<DatabaseSystem>>()
{
    {"Document List",new ObservableCollection<DatabaseSystem>()},
    {"Pipes",new ObservableCollection<DatabaseSystem>()},
    {"Valves",new ObservableCollection<DatabaseSystem>()},
    {"Sensors",new ObservableCollection<DatabaseSystem>()},
    {"Vessels",new ObservableCollection<DatabaseSystem>()},
    {"Heat Exchangers",new ObservableCollection<DatabaseSystem>()},
    {"Filters",new ObservableCollection<DatabaseSystem>()},
    {"Other Equipment",new ObservableCollection<DatabaseSystem>()}
};
<ComboBox ItemsSource="{Binding ElementName=MainView,Path=DataContext.SystemTabLists[Pipes]}" 
          Padding="2" Margin="5 0 5 0" Width="70" Height="20" 
          Foreground ="#F1F1F1" Style="{StaticResource ComboBoxStyleDark}">
    <ComboBox.ItemTemplate>
        <DataTemplate DataType="local:DatabaseSystem">
            <StackPanel Orientation="Horizontal">
                <CheckBox Content="{Binding System}" Foreground="#F1F1F1" 
                          IsChecked="{Binding IsChecked}" 
                          Command="{Binding ElementName=MainView, Path=DataContext.PipeTabChosenSystemChangedCommand }"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>