【发布时间】:2016-09-08 06:18:58
【问题描述】:
我的应用中有一个TabControl。我希望在我的字典中有尽可能多的TabItems。
这是我的字典:
public Dictionary<string , ObservableCollection<PerformanceCounter>> Counters
{
get { return _Counters; }
}
Dictionary<string, ObservableCollection<PerformanceCounter>> _Counters = new Dictionary<string , ObservableCollection<PerformanceCounter>>();
每个条目都有一个字符串键和 PerformanceCounter 对象的 ObservableCollection。重要的是每个 PerformanceCounter 对象都有属性:CounterName 和 InstanceName - 我需要这两个来显示它们。
现在,我的 XAML:
<TabItem Header="Memory">
<Grid Name="RAMGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ListBox Name="RAMListBox" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="0" ItemsSource="{Binding Memory, Mode=OneWay}" SelectionMode="Multiple" BorderThickness="1" BorderBrush="#FF8B8B8B" SelectionChanged="RAMListBox_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<Run Text="{Binding CounterName, Mode=OneWay}" />
<Run Text="{Binding InstanceName, Mode=OneWay}" />
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Name="RAMSelectAllButton" Margin="0,10,0,0" Grid.Column="0" Grid.Row="1" Click="RAMSelectAllButton_Click" >
<TextBlock Text="SELECT ALL"/>
</Button>
<Button Name="RAMUnSelectAllButton" Margin="0,10,0,0" Grid.Column="1" Grid.Row="1" Click="RAMUnSelectAllButton_Click" >
<TextBlock Text="UNSELECT ALL"/>
</Button>
</Grid>
</TabItem>
这就是我所做的,您可能已经知道,它不起作用。上面的代码只针对我的字典的一个条目,其中的键是“内存”。
在我的代码中,我设置了 DataContext:
this.DataContext = appData.Counters;
appData.Counters 是我一开始介绍的字典。
这是我想要实现的目标: 无论我的字典中有多少条目,我的 TabControl 都会为每个条目显示 TabItem。 每个 TabItem 都有一个 ListBox 和 2 个按钮。我也需要能够访问这些(以清除列表并为每个按钮设置点击事件)。
我真的不知道该怎么做,希望你能帮帮我。
【问题讨论】:
-
你的字典中的项目数会在运行时改变吗?
-
不,不会改变
-
如果有人告诉我如何正确绑定到我的字典,我将不胜感激(即使没有数据模板 - 现在我可以根据需要手动添加尽可能多的 TabItems)。这对我来说最重要。
-
@Arie 我试过了。这就是我所做的:我将 ListBox 绑定到 Counters。然后在我的 textBlock 我这样做:
这个例子是针对我字典中的“处理器”键的。它不起作用 - 列表框为空