在 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 中,我如何以编程方式返回复选框值? (并修复额外的行)的主要内容,如果未能解决你的问题,请参考以下文章