Combobox 组合框wpf c中的项目显示不完整
我正在使用wpf c和实体框架 我有一个显示数据库数据的数据网格 当用户单击datagrid时,该行将显示ComboBox中的项,并加载ComboBox中的列 但问题是combobox不显示普通列表 代码隐藏: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
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来更新这么多内容。非常感谢您,我可以给您发送电子邮件吗?