Combobox不会加载数据库值

时间:2014-10-27 08:26:49

标签: c# mvvm combobox entity-framework-6

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

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

我使用实体框架6,因此用户控制文本框和coboboxes绑定到集合视图类。

因此,在xaml中设置了CollectionView类的数据上下文:

<Grid DataContext="{StaticResource signupsViewSource}">

在userControl的代码中有一个像这样:

DataContext = new registrationSQL();

这是困扰我的部分。 ViewModel:

你知道当我放置这样的代码时,组合框完全加载:

    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

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

修改

我可能需要添加它以便让我使组合框工作,我需要滚动到开始/结束,直到视频中没有加载记录然后再次滚动回到第一个/最后一个记录。

或者我可以像这样加载它们但是当这样做时,我不确定是否有任何方法可以将自定义的comboBox项添加到下拉选项中:

<ComboBox x:Name="genderComboBox" ItemsSource="{Binding}">
            <ComboBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <VirtualizingStackPanel/>
                </ItemsPanelTemplate>
            </ComboBox.ItemsPanel>
        </ComboBox>

1 个答案:

答案 0 :(得分:0)

第一期:保持同一记录

=&GT;当您单击表单选项卡时,在该特定时间,检查&#34;标记&#34;文本区域是否为空,如果不为null,则发送&#34;标记&#34;数据获取数据库代码以获取该信息。

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

可能是第二名:  你可能需要重新加载复选框才能再次初始化。 (仍为第二期:请详细说明)