Доступ и изменение элементов WPF через имя переменной - PullRequest
0 голосов
/ 04 июня 2010

У меня есть серия кнопок, помеченных для 24-часовых часов.Например;

<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" />

и т. Д.

Теперь я сохраняю значения каждого элемента в базе данных как BIT, и я пытаюсь связать их, чтобы они были выбраны или нет.У меня была идея попытаться перечислить все кнопки переключения, но я не могу зайти так далеко;

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

Могу ли я вызвать элемент напрямую по имени или номеру элемента?Есть идеи?

Ответы [ 2 ]

1 голос
/ 04 июня 2010

Вы можете получить доступ к элементам управления по имени:

thetime0000.IsChecked = true;
0 голосов
/ 04 июня 2010

Создайте следующее:

Горизонтальный ListView:

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

Класс, содержащий два члена Time и IsChecked:

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));
        }
    } 
}

Подробнее о реализации уведомления об изменении свойства см. Здесь

ObservableCollection, содержащая список экземпляров MyClock:

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 });

ItemsSource вашего ListView уже установлен на ObservableCollection в разметке (см. Выше)

Надеюсь, вы уже установили DataContext.

Теперь, когда пользователь нажимает кнопку ToggleButton, значение True / False / Null будет распространяться на ваше свойство и наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...