组合框更改时动态条形图更新

时间:2014-09-01 06:25:42

标签: c# wpf xaml mvvm charts

在组合框中进行更改后,我的图表需要更新。这根本不会发生,它没有更新到我的加载功能。

组合框正在填充。并且负载图表功能也适用于输入

"真的----需要帮助!!!! "

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>

ViewModel文件 - 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

} //命名空间

2 个答案:

答案 0 :(得分:0)

哇。在我的系统上,您将获得此代码警告的指标。如果你不这样做,也许是时候调整你的系统并听取警告了,因为我100%肯定你会收到警告:

您的ViewModelBase已经实施INotifyPropertyChanged。再次实施它会给你带来比我在这里描述的问题更多的问题。从您的班级中删除您的超流程自己的INotifyPropertyChanged实施,这是ViewModelBase的用途。

如果您想了解代码中的其他问题,请获取一个好的编译器并调整警告级别。您可能已经拥有了一个可以为您工作的工具,没有必要让人类通过互联网完成这项工作。

答案 1 :(得分: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

} //命名空间