首页 > 解决方案 > WPF 绑定到字典中的 ObserVableCollection

问题描述

大家好!

我目前的情况:

public static ObservableCollection<DatabaseSystem> PipesSystemList { get; set; } = new ObservableCollection<DatabaseSystem>();
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>()}
};

在此之后,我尝试将组合框绑定到属于 Pipes 的集合(我成功地用正确的元素填充了集合,所以我需要的数据就在那里):

<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>

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

有人可以帮我我做错了什么吗?或者指出这是否不可能。

提前致谢。

标签: c#wpf

解决方案


推荐阅读