2014-10-27 63 views
1

我应用程序中的组合框看起来很敏感,因为他们最了解的原因。Combobox不会加载数据库值

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

我正在使用实体框架6,以便用户控制文本框和coobobox绑定到集合视图类。

所以这是设置为的CollectionView类的XAML设置数据上下文:

<Grid DataContext="{StaticResource signupsViewSource}"> 

一个在用户控件的代码背后是这样的:

DataContext = new registrationSQL(); 

这是vexes我的一部分。该视图模型:

你看,当我把代码这样的组合框负荷完美:

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

所以出现这种情况,因为下一个用户控件打开时,它初始化视图模型和命令的新实例来选择移动到第一个记录是一遍完成的。为了避免这种情况,我决定实现一个Viewmodel的静态实例。

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

并在两个UserControl上设置数据上下文。

DataContext = registrationSQL.Instance; 

然而,当我运行应用程序时,第一个用户控件加载罚款,第二UC从记录起飞的第一个上离开,但组合框不加载,即使我滚动到下一个或以前的记录。

Combobox not loading

任何线索,以让他们传达的数据怎么办?

编辑

我可能需要添加,为了让我获得组合框的工作,我需要滚动到非常begining /结束,直到没有在教职员加载记录,然后滚动回再次放到第一张/最后一张唱片上。

或者我可以加载他们喜欢这一点,但做这样的时候,我不知道是否有什么办法可以自定义组合框项添加到下拉选项:

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

回答

0

为第1期:至留在相同的记录

=>当你点击表单标签,在那个特定的时间,检查“标签”文本区域是否为空,如果不为空,然后发送该“标记”号码的数据获取数据库代码以获取该信息。

我得到这个问题becoz,标签的孩子是不同的,你需要重写它包含的文本再次与值是值得的。

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

+0

嗯,我确实考虑过这样做。但是,如果我不能想到任何方式做到这一点,而不打破MVVM模式。如果我打算在不破坏模式的情况下做到这一点,那么我必须使用属性Tag来绑定,但所讨论的属性不在我上面描述的ViewModel中。他们在collectionViewSource中。而且我不太确定如何访问Tag文本框数据绑定到的Tag属性。 – Offer 2014-10-27 12:22:12

+0

@Offer是否保存表单数据到任何数据库?除了collectionviewsource .. 'Text =“{绑定/ * ur属性来获取标签内容* /,Mode = TwoWay}” private string _tagno; 公共字符串tagno { get { return _tagno; } set { if(_tagno == value) return; _tagno = value; OnPropertyChanged(()=> SecurityDescription); } } ' 你可以得到标签文本.. – 2014-10-28 08:49:34