【问题标题】:Wpf tool kit datagrid DataGridCheckBoxColumn on_click event:wpf工具包datagrid DataGridCheckBoxColumn on_click事件:
【发布时间】:2010-04-08 17:48:03
【问题描述】:

我想获取选定的行,但 selecteditems 只有一行。我想得到所有选中的项目。我想我需要在勾选复选框时添加事件处理程序,然后将它们全部收集起来。我该如何以最好的方式做到这一点?

【问题讨论】:

  • 您是要使用复选框还是只支持多选?选择是项目上的蓝色突出显示,与是否检查给定列完全不同。

标签: wpf wpftoolkit


【解决方案1】:

您是否使用数据绑定来填充您的 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; }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2013-04-08
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 2010-12-17
    相关资源
    最近更新 更多