c# - 组合框不会加载数据库值

标签 c# mvvm combobox entity-framework-6

我的应用程序中的组合框似乎很敏感,原因是他们最熟悉的。

我在注册页面上使用 MVVM 模式。这意味着我 View 中的信息都是从我创建的类(ViewModel)加载的,而 UserControls(Views) 背后的唯一代码是 DataContext 的设置。

我正在使用 Entity Framework 6,因此用户控件文本框和 coboboxes 绑定(bind)到 Collection View 类。

所以在 xaml 中为 CollectionView 类设置了一个数据上下文:

<Grid DataContext="{StaticResource signupsViewSource}">

userControl后面的代码中的一个是这样的:
DataContext = new registrationSQL();

这是让我烦恼的部分。 View 模型:

您会看到,当我这样放置代码时,组合框会完美加载:
    class registrationSQL
{
    #region Declarations
    // Medcare2 is the name of the app
    Medcare2.mascamainDataSet mascamainDataSet = ((Medcare2.mascamainDataSet)(Application.Current.FindResource("mascamainDataSet")));
    Medcare2.mascamainDataSetTableAdapters.signupsTableAdapter mascamainDataSetsignupTableAdapter = new Medcare2.mascamainDataSetTableAdapters.signupsTableAdapter();
    System.Windows.Data.CollectionViewSource signupsViewSource = (System.Windows.Data.CollectionViewSource)Application.Current.Resources["signupsViewSource"];
    mascamainEntities context = new mascamainEntities();

    #endregion

    #region Constructor

    public registrationSQL()
    {
        // Fill the dataset table signups
        mascamainDataSetsignupTableAdapter.Fill(mascamainDataSet.signups);
        // Select the first record
        signupsViewSource.View.MoveCurrentToFirst();
    }

    #endregion

完成后,整个用户控件加载正常:

When comboboxes are working

没关系。但是,当我告诉 Window 打开另一个 UserControl,它应该加载相同的信息(只是使用不同的布局),使用相同的 ViewModel 和 collectionView,CollectionView 将其选择切换回第一条记录。当我需要它做的是留在已经选择的记录上。

The problem with loading the data this way

之所以会发生这种情况,是因为当打开下一个 UserControl 时,它会初始化 ViewModel 的一个新实例,并且将选择移动到第一条记录的命令重新执行。为了避免这种情况,我决定实现 Viewmodel 的静态实例。
private static registrationSQL instance = new registrationSQL();
    public static registrationSQL Instance
    {
        get
        { return instance; }
    }

并在两个 UserControls 上为其设置数据上下文。
DataContext = registrationSQL.Instance;

但是,当我运行应用程序时,第一个用户控件加载正常,第二个 UC 从第一个停止的记录中起飞,但组合框没有加载,即使我滚动到下一个或上一个记录。

Combobox not loading

有什么线索可以让他们传达数据吗?

编辑

我可能需要补充一点,为了让组合框工作,我需要滚动到最开始/结束,直到 View 中没有加载记录,然后再次滚动回第一个/最后一个记录。

或者,我可以像这样加载它们,但是当以这种方式完成时,我不确定是否有任何方法可以将自定义组合框项添加到下拉选项中:
<ComboBox x:Name="genderComboBox" ItemsSource="{Binding}">
            <ComboBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <VirtualizingStackPanel/>
                </ItemsPanelTemplate>
            </ComboBox.ItemsPanel>
        </ComboBox>

最佳答案

第一个问题:保持相同的记录

=> 当您单击表单选项卡时,在特定时间检查“标签”文本区域是否为空,如果不为空,则将该“标签”编号发送到数据获取数据库代码以获取该信息。

你得到这个问题是因为,子标签不同,你需要用值得的值再次覆盖它包含的文本。

可能是第二个:
您可能需要重新加载复选框以再次初始化。
(仍为第 2 期:请详述)

关于c# - 组合框不会加载数据库值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26583519/

相关文章:

android - 如何使用 Kotlin 和可待因结构在改造中拥有多个基本 URL

android - 使用Firebase进行自定义登录将完整监听器添加到 Activity 中

c# - 在 WPF MVVM 中,我是否有必要将所有要从模型绑定(bind)的属性包装为依赖属性?

javascript - 接受不在列表中的值 - bootstrap 组合框

C# XAML : UI not update after change an instance of ObservableCollection

c# - C#计算两点之间的距离

c# - Windows 服务 app.config 位置

c# - ComboBox 项目选择适用于键盘但不适用于鼠标

JavaFX : ComboBoxTableCell - how to select a value in one click?

c# - 如何在 .NET 中获取 xml 元素的流位置