WPF:用作过滤器的组合框值,但将显示上次选择的数据
WPF: combox values used as filter but data from last selection will be shown
我将 wpf 用于一个小应用程序,其中有 3 个组合框(年、月、类别)。在这 3 个组合框中,您可以 select 值,然后下面的数据网格显示来自上面 selected 值的数据。我的问题是我select一个,但是没有任何反应。如果我 select 下一个,将显示之前的数据。例如,我将年份从 all 更改为 2019,然后将显示来自 all 的数据。如果我现在更改为 2018,将显示 2019 的数据。有什么想法吗?
代码片段:
private void cmbYear_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
fillMonthBox();
updateData();
}
private void CmbMonth_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
updateData();
}
private void CmbCategory_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
updateData();
}
private void updateData() {
getCmbValues();
initalizeDatagrid();
}
private void initalizeDatagrid() {
List<Budget> budget = new List<Budget>();
budget.Add(new Budget() { Datum = "gesamt", Einnahmen = calculate(true), Ausgaben = calculate(false) }) ;
dgBudget.ItemsSource = budget;
}
private double calculate(bool isIncome)
{
double sum = 0.0;
List<Entry> entriesList = entries.entries;
if (isIncome) {
entriesList = entriesList.Where(x => x.value > 0).ToList();
}
else {
entriesList = entriesList.Where(x => x.value < 0).ToList();
}
if (year != null) {
entriesList = entriesList.Where(x => x.dateTime.Year == Int32.Parse(year)).ToList();
}
if (month != null) {
entriesList = entriesList.Where(x => x.dateTime.Month == DateTime.ParseExact(month, "MMMM", CultureInfo.CurrentCulture).Month).ToList();
}
if (category != null) {
entriesList = entriesList.Where(x => x.category.name == category).ToList();
}
entriesList.ForEach(x => sum += x.value);
return Math.Abs(sum);
}
private void getCmbValues() {
year = cmbYear.Text;
month = cmbMonth.Text;
category = cmbCategory.Text;
if (year == all) {
year = null;
}
if (month == all) {
month = null;
}
if (category == all) {
category = null;
}
}
}
public class Budget
{
public string Datum { get; set; }
public double Einnahmen { get; set; }
public double Ausgaben { get; set; }
}
问题出在您读取组合框值的地方。
请使用以下代码相同
year = (cmbYear.SelectedItem as ComboBoxItem).Content;
我将 wpf 用于一个小应用程序,其中有 3 个组合框(年、月、类别)。在这 3 个组合框中,您可以 select 值,然后下面的数据网格显示来自上面 selected 值的数据。我的问题是我select一个,但是没有任何反应。如果我 select 下一个,将显示之前的数据。例如,我将年份从 all 更改为 2019,然后将显示来自 all 的数据。如果我现在更改为 2018,将显示 2019 的数据。有什么想法吗?
代码片段:
private void cmbYear_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
fillMonthBox();
updateData();
}
private void CmbMonth_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
updateData();
}
private void CmbCategory_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
updateData();
}
private void updateData() {
getCmbValues();
initalizeDatagrid();
}
private void initalizeDatagrid() {
List<Budget> budget = new List<Budget>();
budget.Add(new Budget() { Datum = "gesamt", Einnahmen = calculate(true), Ausgaben = calculate(false) }) ;
dgBudget.ItemsSource = budget;
}
private double calculate(bool isIncome)
{
double sum = 0.0;
List<Entry> entriesList = entries.entries;
if (isIncome) {
entriesList = entriesList.Where(x => x.value > 0).ToList();
}
else {
entriesList = entriesList.Where(x => x.value < 0).ToList();
}
if (year != null) {
entriesList = entriesList.Where(x => x.dateTime.Year == Int32.Parse(year)).ToList();
}
if (month != null) {
entriesList = entriesList.Where(x => x.dateTime.Month == DateTime.ParseExact(month, "MMMM", CultureInfo.CurrentCulture).Month).ToList();
}
if (category != null) {
entriesList = entriesList.Where(x => x.category.name == category).ToList();
}
entriesList.ForEach(x => sum += x.value);
return Math.Abs(sum);
}
private void getCmbValues() {
year = cmbYear.Text;
month = cmbMonth.Text;
category = cmbCategory.Text;
if (year == all) {
year = null;
}
if (month == all) {
month = null;
}
if (category == all) {
category = null;
}
}
}
public class Budget
{
public string Datum { get; set; }
public double Einnahmen { get; set; }
public double Ausgaben { get; set; }
}
问题出在您读取组合框值的地方。 请使用以下代码相同
year = (cmbYear.SelectedItem as ComboBoxItem).Content;