我在UserControl上的XAML中的网格布局中声明了复选框。
<CheckBox Content="Boo" Grid.Column="0" Grid.Row="0"/>
<CheckBox Content="Hoo" Grid.Column="0" Grid.Row="1"/>
我想以某种方式迭代C#中的所有这些复选框。 我该怎么做?
谢谢,
答案 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