Combobox 组合框wpf c中的项目显示不完整

Combobox 组合框wpf c中的项目显示不完整,combobox,datagrid,items,Combobox,Datagrid,Items,我正在使用wpf c和实体框架 我有一个显示数据库数据的数据网格 当用户单击datagrid时,该行将显示ComboBox中的项,并加载ComboBox中的列 但问题是combobox不显示普通列表 代码隐藏: DENAF1399Entities dbms = new DENAF1399Entities(); private void Window_Loaded(object sender, RoutedEventArgs e) { var qre = dbms.Database.S

我正在使用wpf c和实体框架

我有一个显示数据库数据的数据网格

当用户单击datagrid时,该行将显示ComboBox中的项,并加载ComboBox中的列

但问题是combobox不显示普通列表

代码隐藏:

DENAF1399Entities dbms = new DENAF1399Entities();

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    var qre = dbms.Database.SqlQuery<Q_View>("SELECT * FROM Q_View");
    datagrid1.ItemsSource = qre.ToList();
}

private void datagrid1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    Q_View QVkala = datagrid1.SelectedItem as Q_View;
    if (QVkala != null)
    {
        combobox1.ItemsSource = QVkala.NAMES;
    }
}
我试过了

-更改组合框的字体

-使用新组合框

但是没有起作用


请帮我在队形中编辑:我很清楚发生了什么。Q_View.NAMES是一个字符串,通过将combobox1.ItemsSource设置为该属性,它将单个项标识为字符串中的字符,因为字符串是IEnumerable

如果您希望组合框中的内容是所选项目的每一列中的内容,则方法如下:

private void datagrid1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    Q_View QVkala = datagrid1.SelectedItem as Q_View;
    if (QVkala != null)
    {
        object[] items = { QVkala.CODE, QVkala.NAME, QVkala.NAMES, QVkala.TOZIH } //etc whatever properties you want to project into this
        combobox1.ItemsSource = items;
    }
}
<DataGrid Name="QViewDataGrid" AutoGenerateColumns="False" ItemsSource="{Binding Q_Views}" SelectedItem="{Binding SelectedQView}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="CODE" Binding="{Binding Path="CODE"}"> //and so forth with more columns
    </DataGrid.Columns>
</DataGrid>
答案的原创作品

乍一看,您的数据似乎被转置了,但总的来说,您似乎没有使用WPF或实体框架,而实际上您可能正在使用它们。WPF用于MVVM设计,实体框架用于将表当作对象集合来处理。由于不太了解您的应用程序,以下是我如何开始的:

首先,我将基本上所有的东西都移到MainWindow.xaml.cs之外,除了自动生成的东西,然后启动一个新的独立类。注意:可能有编译器错误,因为这完全是即兴的

public class MainWindowViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged; //MainWindow.xaml will hook into this
    
    public ObservableCollection<Q_View> Q_Views { get; private set; }
    private Q_View selectedQView;
    public Q_View SelectedQView
    {
        get => selectedQView;
        set
        {
            if(value != selectedQView)
            {
                selectedQView = value;
                PropertyChanged?.Invoke("SelectedQView");
            }
        }
    }
}
最后是数据网格的xaml。按如下方式编辑:

private void datagrid1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    Q_View QVkala = datagrid1.SelectedItem as Q_View;
    if (QVkala != null)
    {
        object[] items = { QVkala.CODE, QVkala.NAME, QVkala.NAMES, QVkala.TOZIH } //etc whatever properties you want to project into this
        combobox1.ItemsSource = items;
    }
}
<DataGrid Name="QViewDataGrid" AutoGenerateColumns="False" ItemsSource="{Binding Q_Views}" SelectedItem="{Binding SelectedQView}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="CODE" Binding="{Binding Path="CODE"}"> //and so forth with more columns
    </DataGrid.Columns>
</DataGrid>

ComboBox将使用类似的语法绑定ItemsSource和SelectedItem。这样做可以避免使用事件处理程序和处理boiler plate来更新这么多内容。

非常感谢您,我可以给您发送电子邮件吗?