在组合框中进行更改后,我的图表需要更新。这根本不会发生,它没有更新到我的加载功能。
组合框正在填充。并且负载图表功能也适用于输入
"真的----需要帮助!!!! "
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
} //命名空间
答案 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
} //命名空间