获取UserControl中的所有复选框 - WP8

时间:2014-10-04 00:13:04

标签: c# windows-phone-7 windows-phone-8 checkbox user-controls

我在UserControl上的XAML中的网格布局中声明了复选框。

<CheckBox Content="Boo" Grid.Column="0" Grid.Row="0"/>
<CheckBox Content="Hoo" Grid.Column="0" Grid.Row="1"/>

我想以某种方式迭代C#中的所有这些复选框。 我该怎么做?

谢谢,

1 个答案:

答案 0 :(得分:2)

不需要以编程方式访问它们。您应该使用ViewModel并将属性绑定到复选框。

public class SomeViewModel : INotifyPropertyChanged
{
    private bool isCheckBoxOneChecked;

    public bool IsCheckBoxOneChecked
    {
        get { return isCheckBoxOneChecked; }
        set
        {
            if (value.Equals(isCheckBoxOneChecked))
            {
                return;
            }

            isCheckBoxOneChecked = value;
            OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        var handler = PropertyChanged;

        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

<CheckBox IsChecked="{Binding IsCheckBoxOneChecked}" Content="Boo" Grid.Column="0" Grid.Row="0"/>
<CheckBox Content="Hoo" Grid.Column="0" Grid.Row="1"/>

您还必须像这样设置DataContext

this.DataContext = new SomeViewModel();

这也可以通过xaml。

然后,您只需将IsCheckBoxOneChecked属性设置为true,即可自动选中该复选框。如果用户取消选中该复选框,则该属性也会设置为false,反之亦然。


请查看此处:Model-View-ViewModel (MVVM) Explained


尽管如此,如果您设置了Name的{​​{1}}属性,则可以迭代所有孩子:

Grid