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;