在形成过程中编辑:对我来说,发生了什么变得很明显。 Q_View.NAMES 是一个字符串,通过将combobox1.ItemsSource 设置为该属性,它会将各个项目标识为字符串中的字符(因为字符串是IEnumerable<char>)。
如果您想要组合框中的内容是所选项目的每一列中的内容,那么这样做的方法是这样的:
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;
}
}
关于答案的原创作品
乍一看,您的数据看起来像是转置的,但总的来说,您似乎没有使用 WPF 或实体框架,就像您真的可以使用它们一样。 WPF 是为 MVVM 设计而设计的,Entity Framework 是为将表视为对象集合而设计的。对您的应用程序了解不多,以下是我的入门方法:
首先,除了从 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");
}
}
}
}
然后在 MainWindow.xaml.cs 中,生成的唯一变化是构造函数(即使不更改代码隐藏,还有另一种方法可以做到这一点,但我不会在这里讨论它,因为我不是就像我对 C# 一样熟悉 xaml)
public class MainWindow : Window
{
public MainWindow()
{
DataContext = new MainWindowViewModel();
InitializeComponent(); //that's auto-generated
}
}
最后,DataGrid 的 xaml。像这样编辑它:
<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 的类似语法。这样做可以避免使用事件处理程序和处理样板来更新这么多东西。