Как читать динамический добавленный флажок?
-
27-09-2019 - |
Вопрос
Я добавляю флажки динамически для Silverlight StackPanel Object:
foreach (String userName in e.Result)
{
CheckBox ch = new CheckBox();
ch.Name = userName;
ch.Content = userName;
ContentStackPanel.Children.Add(ch);
}
Как я прочитаю эти элементы управления для обнаружения того, что из них проверены.
Решение
Вы, вероятно, должны избегать создания флажков в таких кодах. Что-то, что может быть полезно для вас, это мини «ViewModel» для флажка. Что-то вроде этого:
public class Option
{
public string Text {get; set;}
public bool IsChecked {get; set;}
}
Тогда вы можете иметь коллекцию этих вариантов, как это:
var options = new ObservableCollection<Option>();
Как только это заполнено, вы можете связать наблюдательную технику к элементамControl:
<ItemsControl ItemsSource="{Binding options}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Text}" IsChecked="{Binding IsChecked}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Этот XAML создаст флажки для вас для Ever Ever, который вы добавили в коллекцию вариантов. Действительно, вы можете спросить вас с коллекцией вариантов, какие параметры были выбраны:
var selectedNames = from option in options
where option.IsChecked
select option.Text;
Использование связывания и шаблонов и шаблонов данных - это методика, с которой вы должны ознакомиться с Silverlight / WPF. Это действительно важная концепция, и она позволит вам сделать удивительные вещи в вашем приложении.
Другие советы
Вы можете использовать DataBinding в список флажков. Что-то вроде этого:
Используйте ListBox, чтобы создать список проверки:
<ListBox x:Name="chkList" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" >
<CheckBox Content="{Binding userName}" IsChecked="{Binding Checked, Mode=TwoWay}"></CheckBox>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Тогда в вашем коде просто установите элементы Chklist для наблюдательного элемента для наблюдателей с вашим объектом
chkList.ItemsSource = ....