2014-10-27 85 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