组合框不显示项目

本文关键字:项目 显示 组合 | 更新日期: 2023-09-27 18:36:56

这是我的视图模型类

namespace ERP_Lite_Trial.ViewModels
{
    public class GroupsViewModel : INotifyPropertyChanged
    {
        public GroupsViewModel()
        {
            using (DBEntities db = new DBEntities())
            {
                var groups = (from g in db.Groups
                              select g.Name).ToList();
                this.GroupName = groups;
                var correspondingEffects = (from g in db.Groups
                                            select g.Type_Effect.Name).ToList();
                this.EffectCorrespondingToGroup = correspondingEffects;
            }
    }
        private List<string> _groupName;
        public List<string> GroupName
        {
            get
            {
                return _groupName;
            }
            set
            {
                _groupName = value;
                OnPropertyChanged("GroupName");
            }
        }
        private List<string> _effectCorrespondingToGroup;
        public List<string> EffectCorrespondingToGroup
        {
            get
            {
                return _effectCorrespondingToGroup;
            }
            set
            {
                _effectCorrespondingToGroup = value;
                OnPropertyChanged("EffectCorrespondingToGroup");
            }
        }
        public void OnPropertyChanged(string PropertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
    }
}

现在我将向您展示两种情况:

案例1:效果很好

<ComboBox x:Name="cbUnder" ItemsSource="{Binding Path=GroupName}" IsEditable="True"
            Grid.Column="1" Grid.ColumnSpan="4" Grid.Row="3" />

在上述情况下,我从数据库中获取所有组名,并正确显示为组合框的项目。但这不是我想要的。我想在此组合框中显示两列。

情况2:未按预期工作(我可能犯了一些愚蠢的错误)

<ComboBox x:Name="cbUnder" IsEditable="True" Grid.Column="1" Grid.ColumnSpan="4" Grid.Row="3">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=GroupName}" Width="100"/>
                <TextBlock Text="|" Width="10" />
                <TextBlock Text="{Binding Path=EffectCorrespondingToGroup}" Width="100"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

在这种情况下我没有收到任何错误,但我的组合框没有显示任何项目。

组合框不显示项目

您的代码需要创建您当前在两个列表中拥有的信息,因为它们在一个列表中相互关联。作为两个单独的列表,无法将它们相互关联。

首先更改数据库查询以对象列表的形式返回信息。

        using (DBEntities db = new DBEntities())
        {
            GroupsAndEffects = (from g in db.Groups
                          select new GroupAndEffect
                            {
                             GroupName = g.Name
                             EffectCorrespondingToGroup = g.Type_Effect.Name
                            }).ToList();
        }

var 组需要是对象列表,而不是字符串列表:

private List<GroupAndEffect> _groupAndEffects;
    public List<GroupAndEffect> GroupsAndEffects
    {
        get
        {
            return _groupAndEffects;
        }
        set
        {
            _groupAndEffects = value;
            OnPropertyChanged("GroupsAndEffects");
        }
    }

需要 GroupAndEffect 类

public class GroupAndEffect
{
    public string GroupName;
    public string EffectCorrespondingToGroup;
}

更新案例 2:

<ComboBox x:Name="cbUnder" ItemsSource="{Binding GroupsAndEffects}" IsEditable="True" Grid.Column="1" Grid.ColumnSpan="4" Grid.Row="3">
<ComboBox.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding GroupName}"/>
            <TextBlock Text="|" Width="10" />
            <TextBlock Text="{Binding EffectCorrespondingToGroup}" Grid.Column="1" />
        </StackPanel>
    </DataTemplate>
</ComboBox.ItemTemplate></ComboBox>