Набор инструментов Wpf datagrid Событие DataGridCheckBoxColumn on_click: - PullRequest
1 голос
/ 08 апреля 2010

Я хочу получить выбранные строки, но у выбранных элементов есть только одна строка. Я хочу получить все проверенные позиции. Я думаю, что мне нужно добавить обработчик событий, когда флажок снят, а затем собрать их все. Как мне сделать это наилучшим образом?

1 Ответ

1 голос
/ 08 апреля 2010

Используете ли вы привязку данных для заполнения вашей DataGrid? Если это так, то привязка проверенного значения вашего столбца к логическому значению в вашем объекте поддержки, вероятно, является «лучшим» (как в «рекомендациях») способом сделать это. Вот пример кода:

<Window x:Class="CheckGridSample.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:tk="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
    Title="Window1" Height="300" Width="300">
    <StackPanel>
        <tk:DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False">
            <tk:DataGrid.Columns>
                <tk:DataGridTextColumn Header="Name" Binding="{Binding Name}" />
                <tk:DataGridCheckBoxColumn Header="Selected" Binding="{Binding IsChecked}" />
            </tk:DataGrid.Columns>
        </tk:DataGrid>
        <Button Content="Which Items Are Checked?" Click="Button_Click" />
    </StackPanel>
</Window>

using System;
using System.Linq;
using System.Text;
using System.Windows;

namespace CheckGridSample
{
    public partial class Window1
    {
        public Window1()
        {
            InitializeComponent();
            DataContext = new[]
                {
                    new MyModel {Name = "Able"},
                    new MyModel {Name = "Baker", IsChecked = true},
                    new MyModel {Name = "Charlie"}
                };
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var builder = new StringBuilder();
            foreach (var item in ((MyModel[]) DataContext).Where(m => m.IsChecked))
                builder.Append(Environment.NewLine + item.Name);
            MessageBox.Show("Checked:" + builder);
        }
    }

    public class MyModel
    {
        public string Name { get; set; }
        public bool IsChecked { get; set; }
    }
}
...