2010-06-04 56 views
0

我有一系列標記爲24小時制的按鈕。例如;通過變量名稱訪問和更改WPF元素

<StackPanel Orientation="Horizontal"> 
    <ToggleButton Content="00:00" Name="thetime0000"/> 
    <ToggleButton Content="01:00" Name="thetime0100" /> 
    <ToggleButton Content="02:00" Name="thetime0200" /> 
    <ToggleButton Content="03:00" Name="thetime0300" /> 

現在我每個元素的值存儲在數據庫中作爲了一下,我想給他們,讓他們選擇或不相關聯。我有一個想法,想枚舉所有的切換按鈕,但不能達到那麼遠;

System.Windows.Controls.Primitives.ToggleButton [24] fudge = 
    new System.Windows.Controls.Primitives.ToggleButton [24]; 
    fudge[0] = thetime0000; 
    fudge[1] = thetime0100; 

我可以直接通過元素名稱或編號調用元素嗎?有任何想法嗎?

回答

0

創建以下文件:

一個水平的ListView:

<ListView ItemsSource="{Binding myClocks}"> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <VirtualizingStackPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <ToggleButton /> 
     </DataTemplate> 
    </ListView.ItemTemplate>  
</ListView> 

含有類中的兩個成員TimeIsChecked

Class MyClock : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 
    string time; 
    Nullable<bool> isChecked; 
    public string Time 
    { 
     get { return time }; 
     set 
     { 
      time = value; 
      OnPropertyChanged("Time"); 
     } 
    }; 
    // Similarly create property for isChecked   
    protected void OnPropertyChanged(string name) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(name)); 
     } 
    } 
} 

有關implementing property change notification see here

含MyClock實例列表一個ObservableCollection更多細節:

ObservableCollection<MyClock> myClocks = new ObservableCollection<MyClock>(); 

添加了24個項目的集合:

for(int i=0; i<24; i++) 
    myClocks.Add(new MyClock{ Time = String.Format("00:{0}",i.ToString("D2"}), IsChecked = false }); 

你的ListView的的ItemsSource已經被設置爲標記中的ObservableCollection(參見上文)

希望您已經設置了DataC ontext。

現在每當用戶點擊ToggleButton時,值True/False/Null將會傳播到您的屬性,反之亦然。

1

可以按名稱訪問控制:

thetime0000.IsChecked = true; 
相關問題