2014-09-01 55 views
-1

在組合框更改後,我的圖表需要更新。這一切都沒有發生,它沒有更新到我的負載func。組合框更新動態條形圖更改

組合框正在正確填充。和負載圖表功能也正常輸入

「真的----幫助需要!!!!」

XAML文件

<StackPanel Grid.Column="1" > 
     <ComboBox x:Name="SelectNameCB" FontSize="15" Margin="11,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="207" ItemsSource="{Binding MyComboBoxData}" SelectedItem="{Binding selectedcb, Mode=Default, UpdateSourceTrigger=PropertyChanged}" SelectedIndex="0" /> 
     <DVC:Chart x:Name="mcChart" Margin="10,10,31,0" Height="273" Background="LightGoldenrodYellow" Title="{Binding Text, ElementName=SelectNameCB}" > 
      <DVC:BarSeries Title="Avg. Score" IndependentValueBinding="{Binding Key}" DependentValueBinding="{Binding Value}" ItemsSource="{Binding ChartData}" Margin="10,10,76,10" AnimationSequence="LastToFirst"/> 

     </DVC:Chart> 

視圖模型文件 - fbvm

namespace charting 
{ 
class fbvm : ViewModelBase, INotifyPropertyChanged 
{ 
    public String eID, loadtoc="A_M"; 

    private List<KeyValuePair<string, float>> _chartData; 
    public List<KeyValuePair<string, float>> ChartData 
    { 
     get 
     { 
      return _chartData; 
     } 
     set 
     { 
      _chartData = value; 
      OnPropertyChanged(() => ChartData); 
     } 
    } 
    private List<string> _MyComboBoxData; 
    public List<string> MyComboBoxData 
    { 
     get 
     { 
      return _MyComboBoxData; 
     } 
     set 
     { 
      _MyComboBoxData = value; 
      OnPropertyChanged(() => MyComboBoxData); 
     } 
    } 



    private string _selectedcb; 
    public string selectedcb 
    { 
     get 
     { 
      loadtoc = _selectedcb; 
      return _selectedcb; 

     } 

     set 
     {    
      _selectedcb = value; 
      OnPropertyChanged(() => selectedcb); 

     } 
    } 



    public fbvm() 
    { 
     MyComboBoxData = new List<string>(); 
     comboboxload(); 
     ChartData = new List<KeyValuePair<string, float>>(); 
     LoadColumnChartData(loadtoc); 
     } 

    private void comboboxload() 
    { 
     OleDbConnection ConDb; 

     ConDb = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Admin\\Documents\\Visual Studio 2012\\Projects\\Feedback\\Feedback.accdb"); 

     try 
     { 
      ConDb.Open(); 
      OleDbCommand DBSelect = new System.Data.OleDb.OleDbCommand("select FName, LName,ID_NAME from NameList", ConDb); 
      OleDbDataReader reader = DBSelect.ExecuteReader(); 
      while (reader.Read()) 
      { 
       string eNAME = ""; 
       eID = reader["ID_NAME"].ToString(); 
       eNAME += reader["FName"].ToString(); 
       eNAME += " " + reader["LName"].ToString(); 

       MyComboBoxData.Add(eNAME); 

      } 

     } 
     catch (Exception ae) 
     { 
      MessageBox.Show(ae.Message); 

     }//catch 




    } 
    public void LoadColumnChartData(string loadtodb) 
    { 
     int cc1=0,tc1=0,aa1=0,blfe1=0,count=0; 
     float cc11 = 0, tc11 = 0, aa11 = 0, blfe11 = 0; 
     string str = loadtoc; 
     string[] output = str.Split(' '); 
     foreach (string s in output) 
     { loadtodb = str[0] + "_"; 
     } 
     OleDbConnection connect = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Admin\Documents\Visual Studio 2012\Projects\Feedback\Feedback.accdb"); 
     connect.Open(); 
     string query = "select CC,TC,AA,BLFE,WMU from " +loadtoc; 
     OleDbCommand select = new OleDbCommand("select", connect); 
     select.CommandText = query; 
     OleDbDataReader reader = select.ExecuteReader(); 
     while (reader.Read()) 
     { 
      cc1 += Int32.Parse(reader[0].ToString()); 
      tc1 += Int32.Parse(reader[1].ToString()); 
      aa1 += Int32.Parse(reader[2].ToString()); 
      blfe1 += Int32.Parse(reader[3].ToString()); 
      ++count; 
     } 
     cc11 =(float) cc1/count; aa11 =(float) aa1/count; 
     tc11 =(float) tc1/count; blfe11 =(float) blfe1/count; 
     ChartData.Add(new KeyValuePair<string, float>("cc", cc11)); 
     ChartData.Add(new KeyValuePair<string, float>("tc", tc11)); 
     ChartData.Add(new KeyValuePair<string, float>("aa", aa11)); 
     ChartData.Add(new KeyValuePair<string, float>("blfe", blfe11)); 
     ChartData = new List<KeyValuePair<string, float>>(ChartData); 

    }//loadcoloumnchart 


    #region INotifyPropertyChanged Members 

    /// <summary> 
    /// Need to implement this interface in order to get data binding 
    /// to work properly. 
    /// </summary> 
    /// <param name="propertyName"></param> 
    private void NotifyPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    #endregion 

}//class fbvm 

} //命名空間

回答

0

問題已解決。謝謝!****

namespace charting 
{ 

class fbvm : ViewModelBase, INotifyPropertyChanged 
{ 
    OleDbConnection ConDb; 
    public String eID; 

    public string _Indexname; 
    public string Indexname 
    { 
     get 
     { 
      return _Indexname; 
     } 
     set 
     { 
      _Indexname = value; 

      LoadColumnChartData(Indexname); 
      OnPropertyChanged(() => Indexname); 
     } 
    } 

    private List<KeyValuePair<string, float>> _chartData; 
    public List<KeyValuePair<string, float>> ChartData 
    { 
     get 
     { 
      return _chartData; 
     } 
     set 
     { 
      _chartData = value; 
      OnPropertyChanged(() => ChartData); 
     } 
    } 
    private List<string> _MyComboBoxData; 
    public List<string> MyComboBoxData 
    { 
     get 
     { 
      return _MyComboBoxData; 
     } 
     set 
     { 
      _MyComboBoxData = value; 
      OnPropertyChanged(() => MyComboBoxData); 
     } 
    } 



    public fbvm() 
    { 
     MyComboBoxData = new List<string>(); 
     comboboxload(); 
    } 

    private void comboboxload() 
    { 
     ConDb = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\\\CORE-2\\Jeevanawashyak\\Feedback.accdb"); 
     try 
     { 
       ConDb.Open(); 
       OleDbCommand DBSelect = new System.Data.OleDb.OleDbCommand("select FName, LName,ID_NAME from NameList", ConDb); 
       OleDbDataReader reader = DBSelect.ExecuteReader(); 
       while (reader.Read()) 
       { 
        string eNAME = ""; 
        eID = reader["ID_NAME"].ToString(); 
        eNAME += reader["FName"].ToString(); 
        eNAME += " " + reader["LName"].ToString(); 

        MyComboBoxData.Add(eNAME); 
       } 
      } 
      catch (Exception ae) 
      { 
       MessageBox.Show(ae.Message); 

      }//catch 
    } 
    private void LoadColumnChartData(string Ind) 
    { 
     ChartData = new List<KeyValuePair<string, float>>(); 
     int count2 = 0; 
     string temp = Ind; 
     string temptodb = null; 
     foreach (var part in temp.Split(' ')) 
     { 
      temptodb += part.Substring(0, 1); 
      if(count2<1) 
      temptodb += "_"; 
      count2++; 
     } 
     int cc1=0,tc1=0,aa1=0,blfe1=0,count=0; 
     float cc11 = 0, tc11 = 0, aa11 = 0, blfe11 = 0; 
     string query = "select CC,TC,AA,BLFE,WMU from "+temptodb; 
      OleDbCommand select = new OleDbCommand("select", ConDb); 
      select.CommandText = query; 
      OleDbDataReader reader = select.ExecuteReader(); 
      while (reader.Read()) 
      { 
       cc1 += Int32.Parse(reader[0].ToString()); 
       tc1 += Int32.Parse(reader[1].ToString()); 
       aa1 += Int32.Parse(reader[2].ToString()); 
       blfe1 += Int32.Parse(reader[3].ToString()); 
       ++count; 
      } 
      cc11 = (float)cc1/count;aa11 = (float)aa1/count; 
      tc11 = (float)tc1/count; blfe11 = (float)blfe1/count; 
      // cc11 = 3.11f; 
      // MessageBox.Show(cc11.ToString(), tc11.ToString()); 
      ChartData.Add(new KeyValuePair<string, float>("Communication", cc11)); 
      ChartData.Add(new KeyValuePair<string, float>("Topic Coverage", tc11)); 
      ChartData.Add(new KeyValuePair<string, float>("Audience Attn.", aa11)); 
      ChartData.Add(new KeyValuePair<string, float>("Body Language & Facial Expr.", blfe11)); 
      ChartData = new List<KeyValuePair<string, float>>(ChartData); 

    }//loadcoloumnchart 



}//class fbvm 

} //命名空間

0

哇。在我的系統中,你會得到一個關於此代碼警告的度量標準。如果你不這樣做,或許是時候調整你的系統並聽取警告了,因爲我100%確定你會得到這樣的警告:

你的ViewModelBase已經實現了INotifyPropertyChanged。再次實施它會給你更多的問題,而不是我在這裏描述的。從你的班級中刪除你的superfluent自己實現的INotifyPropertyChanged,這就是ViewModelBase的用途。

如果您想知道代碼中的其他問題,請獲得一個好的編譯器並調整警告級別。很有可能你已經擁有了一個能夠爲你工作的工具,沒有必要讓人類通過互聯網來完成它。