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>