2014-10-04 51 views
0

我已經在UserControl的XAML中的網格佈局中聲明瞭複選框。獲取用戶控件中的所有複選框 - WP8

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

我想以某種方式迭代在C#中的所有這些複選框。 我該怎麼做?

感謝,

+0

答案[本問題](http://stackoverflow.com/questions/10279092/how-to-get-children-of-a-wpf-container-by-type)可能會有所幫助 – allonym 2014-10-04 00:29:13

回答

2

有souldn't是需要以編程方式訪問它們。您應該使用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


不過,如果您設置Grid你可以遍歷所有孩子的Name屬性:

// Grid is named 'MyGrid' 
foreach (var child in this.MyGrid.Children) 
{ 
    if (child is CheckBox) 
    { 
     var checkBox = child as CheckBox; 

     // Do awesome stuff with the checkbox 
    } 
} 
相關問題