从组合框中的复选框列表中获取IsChecked属性值

时间:2017-06-28 15:04:12

标签: c# wpf checkbox combobox

我正在编写一个程序,其中我有一个由一系列复选框组成的组合框。 用户可以根据需要选择多个复选框。在taht之后,当他点击一个按钮时,我想检查复选框以查看哪些是选中的,哪些不是。

但我不知道该怎么做。我尝试了很多方法,但没有任何方法可以让我回报财产的价值。实际上,我无法从代码中获取绑定属性。这是代码:

在WPF中:

<ComboBox x:Name="month_comboBox" Margin="349,107,0,0" Height="22" VerticalAlignment="Top" Visibility="Hidden">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <CheckBox Width="20" IsChecked="{Binding Path=IsSelected, Mode=TwoWay}"/>
                <TextBlock Text="{Binding Path=month_Name}" Width="100" />
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

在.cs文件中,这是加载combobx的代码:

在主类中有这种方法:

private void LoadMonths()
    {
        MonthList ML = new MonthList();
        month_comboBox.ItemsSource = ML.Months;
        month_comboBox.SelectedIndex = 0;
    }

并且元素还有这两个类:

public class MonthList
    {
        ObservableCollection<Month> _Months = new ObservableCollection<Month>();

        public MonthList()
        {
            _Months.Add(new Month { month_Name = "every month" });
            _Months.Add(new Month { month_Name = "january" });
            _Months.Add(new Month { month_Name = "february" });
            _Months.Add(new Month { month_Name = "march" });
            _Months.Add(new Month { month_Name = "april" });
            _Months.Add(new Month { month_Name = "may" });
            _Months.Add(new Month { month_Name = "june" });
            _Months.Add(new Month { month_Name = "july" });
            _Months.Add(new Month { month_Name = "august" });
            _Months.Add(new Month { month_Name = "september" });
            _Months.Add(new Month { month_Name = "october" });
            _Months.Add(new Month { month_Name = "november" });
            _Months.Add(new Month { month_Name = "december" }); 
        }

        public ObservableCollection<Month> Months { get { return _Months; } }

    }

    public class Month
    {
        private string monthName;

        public bool IsSelected {
            get { return IsSelected; }
            set; 
        }

        public string month_Name
        {
            get { return monthName; }
            set { monthName = value; }
        }

    }

现在,我想要知道的是,对于组合框中的每个复选框,是否选中了复选框。

我有这个,但我不知道用什么指令来获取财产价值:

for (int i = 0; i < month_comboBox.Items.Count; i++) { 
    //Instruction missing here
}

我知道我必须使用类似的东西

month_comboBox.Items[i]

但我不知道我必须挂钩才能获得属性值。

谢谢大家

1 个答案:

答案 0 :(得分:3)

这非常简单 - 像这样投射:

public void GetValues()
{
    foreach(var item in month_comboBox.Items)
    {
        Month temp = item as Month;
        bool isSelected = temp.IsSelected;
        //continue here :)
    }
}

您也可以使用模式匹配。

        if (item is Month month)
        {
            var isSelected = month.IsSelected;
            //continue here :)
        }

或者可能是这样的:

    public IEnumerable<Month> GetValues()
    {
        foreach(var item in month_comboBox.Items)
        {
            if(item is Month month) return month;
        }
    }

另请查看MVVM here

相关问题