在 MahApps Metro DataGridCheckBoxColumn 中,我如何以编程方式返回复选框值? (并修复额外的行)

Posted

技术标签:

【中文标题】在 MahApps Metro DataGridCheckBoxColumn 中,我如何以编程方式返回复选框值? (并修复额外的行)【英文标题】:In MahApps Metro DataGridCheckBoxColumn how can I programmatically return checkbox values? (and fix extra row) 【发布时间】:2016-01-06 16:35:04 【问题描述】:

我知道这不一定是 MahApps Metro DataGridCheckBoxColumns 特有的,但我认为这些信息可能有助于有人回答我的问题。

我正在尝试对 MahApps Metro 中的 DataGridCheckBox 列做两件事

1.我想要两个单独的数据网格,并且能够返回所选行的第二列中的值

例如,如果我有一个如下所示的数据网格:

当某人选中了与 2 关联的复选框,并且选中了与 Red 关联的复选框时,我希望消息框显示“2 Red”。

我的 .xaml

        <DataGrid Name="numberGrid"
              ItemsSource="Binding Path=numberGrid"
              Grid.Row="0"
              AutoGenerateColumns="False"
                  Width="300"
                  Height="auto">
            <DataGrid.Columns>

                <DataGridCheckBoxColumn ElementStyle="DynamicResource MetroDataGridCheckBox"
                                    EditingElementStyle="DynamicResource MetroDataGridCheckBox"
                                    Header="Select"
                                    Binding="Binding RelativeSource=RelativeSource AncestorType=DataGridRow, Path=IsSelected, Mode=OneWay"
                                    />
                <DataGridTextColumn     Header="Numbers" 
                                    Binding="Binding Number, Mode=OneWay"
                                        Width="*"/>
            </DataGrid.Columns>
        </DataGrid>




        <DataGrid Name="colorGrid"
              ItemsSource="Binding Path=colorGrid"
              Grid.Row="0"
              AutoGenerateColumns="False"
              Width="300">
            <DataGrid.Columns>
                <DataGridCheckBoxColumn ElementStyle="DynamicResource MetroDataGridCheckBox"
                                    EditingElementStyle="DynamicResource MetroDataGridCheckBox"
                                    Header="Select"
                                    Binding="Binding RelativeSource=RelativeSource AncestorType=DataGridRow, Path=IsSelected, Mode=OneWay"
                                    />
                <DataGridTextColumn     Header="Colors" 
                                    Binding="Binding Color, Mode=OneWay"
                                        Width="*"/>
            </DataGrid.Columns>
        </DataGrid>

我的 .cs 以及我认为应该发生的情况的伪代码已被注释掉。

    ObservableCollection<MahAppsNumbers> MAnumbers = new ObservableCollection<MahAppsNumbers>
    

        new MahAppsNumbersNumber = "1",
        new MahAppsNumbersNumber = "2",
        new MahAppsNumbersNumber = "3",
        new MahAppsNumbersNumber = "4"


    ;

    public class MahAppsNumbers
    
        public string Number  set; get; 
    

    ObservableCollection<MahAppsAccents> MAcolors = new ObservableCollection<MahAppsColors>
    
        new MahAppsColorsColor = "Red",
        new MahAppsColorsColor = "Orange",
        new MahAppsColorsColor = "Yellow",
        new MahAppsColorsColor = "Green"
    ;

    public class MahAppsColors
    
        public string Color  set; get; 
    




    public myWindow()
    




        InitializeComponent();

        numberGrid.ItemsSource = MAnumbers;
        colorGrid.ItemsSource = MAcolors;

        //Something like this maybe?  I know this isn't a thing you can do
        //string currentNumber = numberGrid.SelectedRow[1]; //to get the second column value
        //string currentColor = colorGrid.SelectedRow[1];
        //MessageBox.Show(currentNumber + currentColor);


    

2。对于奖励积分,为什么我在末尾多出了一行?

我找到了很多解决方案,基本上都是same。但这并不能解决我的问题。

提前致谢。

编辑 1

因为我什至希望每次选择一个框时都发生这种情况,所以我在 myWindow() 中尝试这样的事情

this.numberGrid.SelectedCellsChanged += new SelectedCellsChangedEventHandler(numberGrid_SelectionChanged);

并添加一个功能,希望有人能指出我正确的修复方向。

private void numberGrid_SelectionChanged(object sender, SelectedCellsChangedEventArgs e)

     MessageBox.Show(numberGrid.SelectedItem.ToString());

【问题讨论】:

【参考方案1】:

尝试像这样绑定,

<DataGridCheckBoxColumn  Binding="Binding Path=IsSelected, Mode=TwoWay" />

现在您有一个属性IsSelected 将其添加到您的集合中,该集合绑定您的DataGrid。当您检查 CheckBox IsSelected property Set 将调用并将其设置为 True 时,现在您的集合中有 IsSelected True 进行检查。

【讨论】:

以上是关于在 MahApps Metro DataGridCheckBoxColumn 中,我如何以编程方式返回复选框值? (并修复额外的行)的主要内容,如果未能解决你的问题,请参考以下文章

wpf开源控件MahApps.Metro

WPF_MahApps.Metro界面主题使用

WPF_MahApps.Metro界面主题使用

WPF_MahApps.Metro界面主题使用

MahApps.Metro ToggleSwitch 焦点问题

更改 MahApps Metro Split ButtoniIcon 大小