【发布时间】:2013-11-26 15:52:03
【问题描述】:
正如标题所示,我想将静态项目添加到 dataBound ComboBox。
我已经推荐了this 帖子。
数据绑定组合框:
<ComboBox Name="comboBox1" Width="Auto" ItemsSource="{Binding}" />
将静态项添加到组合框:
<ComboBox Text="Is not open">
<ComboBoxItem Name="cbi1">Item1</ComboBoxItem>
<ComboBoxItem Name="cbi2">Item2</ComboBoxItem>
<ComboBoxItem Name="cbi3">Item3</ComboBoxItem>
</ComboBox>
使用 CompositeCollection 一起做上述事情:
<ComboBox>
<ComboBox.Items>
<CompositeCollection>
<CollectionContainer Collection="{Binding Source={...whatever...}" />
<ComboBoxItem Name="cbi1">Item1</ComboBoxItem>
<ComboBoxItem Name="cbi2">Item2</ComboBoxItem>
<ComboBoxItem Name="cbi3">Item3</ComboBoxItem>
</CompositeCollection>
</ComboBox.Items>
</ComboBox>
但是上面的例子并没有解决我的问题。
我想将静态项目添加到我使用 DataTemplate 的 dataBound ComboBox
这是我的 dataBound ComboBox 代码(我不知道如何添加静态项):
<ComboBox x:Name="cbUnder" ItemsSource="{Binding GroupsAndCorrespondingEffects}"
IsEditable="True" SelectedItem="{Binding SelectedGroup, Mode=TwoWay}"
TextSearch.TextPath="GroupName" Grid.Column="1" Grid.ColumnSpan="4" Grid.Row="3">
<ComboBox.ItemTemplate>
<DataTemplate>
<VirtualizingStackPanel Orientation="Horizontal">
<TextBlock Text="{Binding GroupName}" Width="250"/>
<TextBlock Text="{Binding CorrespondingEffect}" />
</VirtualizingStackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
按照 aks81 的要求更新:
这里是 GroupsAndCorrespondingEffects 的代码
public GroupsViewModel()
{
using (DBEntities db = new DBEntities())
{
GroupsAndCorrespondingEffects = (from g in db.Groups
select new GroupAndCorrespondingEffect
{
GroupName = g.Name,
CorrespondingEffect = g.Type_Effect.Name
}
).ToList().OrderBy(g => g.GroupName);
Items = (from e in db.Type_Effect
select e.Name).ToList();
}
}
public static GroupsViewModel CurrentInstance { get { return Instance; } }
private IEnumerable<GroupAndCorrespondingEffect> _groupsAndCorrespondingEffects;
public IEnumerable<GroupAndCorrespondingEffect> GroupsAndCorrespondingEffects
{
get
{
return _groupsAndCorrespondingEffects;
}
set
{
_groupsAndCorrespondingEffects = value;
OnPropertyChanged("GroupsAndCorrespondingEffects");
}
}
【问题讨论】:
-
其实我有点困惑。静态项目是什么意思?问题不是,我不明白你的意图,而是因为你已经分配了一个
ItemsSource。目前尚不清楚,为什么以及您要另外添加的内容。 -
是的,我已经分配了一个 ItemsSource。这个 ItemsSource 将从数据库中获取数据。但我想在填充数据库中的数据之前添加一个项目。
-
而不是使用
xaml添加ComboBoxItem为什么不将它添加到集合GroupsAndCorrespondingEffects本身?也请将VirtualizingStackPanel从ItemTemplate移至ItemsPanel。在DataTemplate中使用网格 -
@aks81 你能给我看一个你想解释的例子吗?
-
好的,所以它是
IEnumerable。您想在哪一步向GroupsAndCorrespondingEffects添加一些值?您可以做的是将GroupsAndCorrespondingEffects转换为List<GroupsAndCorrespondingEffects>,然后添加您的静态值,然后再转换回IEnumerable。我假设您只需要添加一次这些静态值,而不是经常添加。