【问题标题】:Combobox won't load database values组合框不会加载数据库值
【发布时间】:2014-10-27 08:26:48
【问题描述】:

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

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

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

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

<Grid DataContext="{StaticResource signupsViewSource}">

在userControl的代码后面是这样的:

DataContext = new registrationSQL();

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

您会看到,当我这样放置代码时,组合框可以完美加载:

    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

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

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

之所以会发生这种情况,是因为当打开下一个 UserControl 时,它会初始化 ViewModel 的一个新实例,并且将选择移动到第一条记录的命令重新执行。为了避免这种情况,我决定实现 Viewmodel 的静态实例。

private static registrationSQL instance = new registrationSQL();
    public static registrationSQL Instance
    {
        get
        { return instance; }
    }

并在两个用户控件上为其设置数据上下文。

DataContext = registrationSQL.Instance;

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

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

编辑

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

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

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

【问题讨论】:

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


    【解决方案1】:

    第一期:保持不变

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

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

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

    【讨论】:

    • 嗯,我确实考虑过这样做。但是,如果我想不出任何不破坏 MVVM 模式的方法。如果我要在不破坏模式的情况下这样做,我将不得不使用属性 Tag 绑定到但相关属性不在我上面描述的 ViewModel 中。它们在 collectionViewSource 中。而且我不太确定如何访问 Tag 文本框数据绑定到的 Tag 属性。
    • @Offer 你是否将表单数据保存到任何数据库中?除了collectionviewsource..Text="{Binding /*ur property to get the tag content*/, Mode=TwoWay}" private string _tagno; public string tagno { get { return _tagno; } set { if (_tagno == value) return; _tagno = value; OnPropertyChanged(() =&gt; SecurityDescription); } } 你可以得到标签文本..
    猜你喜欢
    • 2012-10-08
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    相关资源
    最近更新 更多