我正在使用 DataGrid 显示数据库中的税务账户并计算 DataGrid 选择的余额。 DataGrid 充满了“ObservableCollectionList”。每个税务帐户都有一个复选框。单击复选框更新网格,带有税帐号的行被删除或添加到数据网格。 CheckBoxes 是在带有 DataTemplate 的 ListBox 中创建的,并将“ObservableCollectionList”作为 ItemSource。显示带有出现在 DataGrid 选择中的税务帐号的复选框。现在我在收集方法中未发送的其他复选框时遇到问题(对象发送者,RoutedEventArgs e)。没有 CheckBoxes 的 DataTemplate 它工作正常:之前:
void OnCheckBoxClick(object sender, RoutedEventArgs e)
{
var checkedaccounts = new HashSet<int>();
foreach (CheckBox checkBox in ListBoxOptions.Items)
{
if (checkBox.IsChecked == true)
{
string kto = checkBox.Name.Replace("k_", "");
//MessageBox.Show("CheckBox Name: " + kto);
int intkto = Int32.Parse(kto);
checkedaccounts.Add(intkto);
}
}
if(JobsCollectionView != null)
JobsCollectionView.Filter =job => checkedaccounts.Contains((job as SaldenData).StKNrFk);
这不再有效了!
问题一:如何将所有的CheckBoxes收集到一个列表中,并查看是否选中或未选中?
问题 2:如何从 JobsCollectionView (DataGrid) 中一次删除或添加它们?我现在的语法:
public ObservableCollection\<SaldenData\> SaldenListe { get; set; }
public ObservableCollection\<StKonten\> StKontoData { get; set; }
XAML:
\<ListBox Name="ListBoxOptions" ItemsSource="{Binding StKontoData}"
Background="Transparent"
BorderThickness="0" Grid.Row="1"
SelectionMode="Multiple" \>
\<ListBox.ItemTemplate\>
\<DataTemplate\>
\<CheckBox Content="{Binding StKNummer}"
IsChecked="True"
FontSize="10" Height="20" Margin="20,0,0,0"
Foreground="Beige"
UseLayoutRounding="True" Checked="cb_CheckedTrue"
Unchecked="cb_CheckedFalse"
VerticalAlignment="Bottom"
BorderThickness="1,1,1,1"
HorizontalAlignment="Left" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
方法:
private void cb_CheckedTrue(object sender, RoutedEventArgs e)
{
string st = tb_StNr.ToString();
CheckBox tb = (CheckBox)sender;
MessageBox.Show("Line 168 OnCheckBoxClick: "+ st + " " + tb.Content
+ " = " + tb.IsChecked);
var checkedaccounts = new HashSet\<int\>();
if (tb.IsChecked == true)
string fkto = tb.Content.ToString();
MessageBox.Show("Line 174 CheckBox Content: " + fkto);
int intkto = Int32.Parse(fkto);
checkedaccounts.Add(intkto);
if (JobsCollectionView != null)
obsCollectionView.Filter = job =>
checkedaccounts.Contains((job as SaldenData).StKNrFk);
}
我会很高兴得到答案!