WPF Получение содержимого CheckBox - PullRequest
0 голосов
/ 09 июня 2011

Я использую шаблоны данных, чтобы установить значения флажков внутри комбинированного списка следующим образом:

<ComboBox Margin="118,117,163,164" ItemsSource="{Binding collection}">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <CheckBox Content="{Binding Name}"/>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

Это работает так, как должно.Моя проблема в том, что когда пользователь устанавливает флажок, я должен иметь возможность получить значение содержимого, сохраненное в флажке.Возможно ли это?

Спасибо.

1 Ответ

2 голосов
/ 09 июня 2011

Вам необходимо привязать свойство IsChecked флажка к другому свойству объекта поддержки для каждого элемента.т. е. тип с именем должен предоставлять логическое свойство IsSelected.

При связывании данных будет соответствующим образом обновлено свойство IsSelected, к которому вам будет легко получить доступ в коде.Например, вы можете перебрать список и отфильтровать все элементы, для которых IsSelected = false.

Пример кода

XAML

<StackPanel>
        <ComboBox ItemsSource="{Binding Items}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <CheckBox Content="{Binding Name}" IsChecked="{Binding IsSelected}"/>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
        <Button Click="EvaluateSelectedItems">Show Selected</Button>
        <TextBlock>Selected Items</TextBlock>
        <ListBox ItemsSource="{Binding SelectedItems}" DisplayMemberPath="Name" Background="AliceBlue"/>
    </StackPanel>

Код позади

public MainWindow()
{
    InitializeComponent();
    this.DataContext = this;

    Items = new List<ItemVM>
                {
                    new ItemVM {IsSelected = false, Name = "Firefox"},
                    new ItemVM {IsSelected = false, Name = "Chrome"},
                    new ItemVM {IsSelected = false, Name = "IE"}
                };
}

public IEnumerable<ItemVM> Items { get; set; }
private IEnumerable<ItemVM> _selectedItems;
public IEnumerable<ItemVM> SelectedItems
{
    get { return _selectedItems; }
    set
    {
        _selectedItems = value;
        if (PropertyChanged != null)
            this.PropertyChanged(this, new PropertyChangedEventArgs("SelectedItems"));
    }
}

private void EvaluateSelectedItems(object sender, RoutedEventArgs e)
{
    SelectedItems = Items.Where(item => item.IsSelected);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...