【问题标题】:Combobox with static and dynamic data together in wpfwpf中包含静态和动态数据的组合框
【发布时间】: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 本身?也请将VirtualizingStackPanelItemTemplate 移至ItemsPanel。在DataTemplate中使用网格
  • @aks81 你能给我看一个你想解释的例子吗?
  • 好的,所以它是IEnumerable。您想在哪一步向GroupsAndCorrespondingEffects 添加一些值?您可以做的是将GroupsAndCorrespondingEffects 转换为List&lt;GroupsAndCorrespondingEffects&gt;,然后添加您的静态值,然后再转换回IEnumerable。我假设您只需要添加一次这些静态值,而不是经常添加。

标签: wpf xaml combobox


【解决方案1】:
猜你喜欢
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
相关资源
最近更新 更多