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

时间:2015-10-08 21:25:51

标签: c# wpf checkbox datagrid mahapps.metro

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

我试图用MahApps Metro中的DataGridCheckBox列做两件事

1。我想有两个独立的数据网格,并且能够返回选择哪一行的第二列中的值

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

enter image description here

如果有人选中了与2相关联的复选框,并且选中了与红色关联的复选框,我希望显示一个消息框" 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>

my .cs ,我认为应该发生的伪代码被注释掉。

    ObservableCollection<MahAppsNumbers> MAnumbers = new ObservableCollection<MahAppsNumbers>
    {

        new MahAppsNumbers{Number = "1"},
        new MahAppsNumbers{Number = "2"},
        new MahAppsNumbers{Number = "3"},
        new MahAppsNumbers{Number = "4"}


    };

    public class MahAppsNumbers
    {
        public string Number { set; get; }
    }

    ObservableCollection<MahAppsAccents> MAcolors = new ObservableCollection<MahAppsColors>
    {
        new MahAppsColors{Color = "Red"},
        new MahAppsColors{Color = "Orange"},
        new MahAppsColors{Color = "Yellow"},
        new MahAppsColors{Color = "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 个答案:

答案 0 :(得分:1)

尝试这样的绑定,

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

现在,您有一个属性IsSelected将其添加到您的收藏夹中,该收藏夹绑定了您的DataGrid。当您检查CheckBox IsSelected property Set将会调用并将其设置为True时,现在您的收藏集中的IsSelected True已经过检查。