带有 DataTemplate 控件的 CheckBox [关闭]

问题描述 投票:0回答:0

我正在使用 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);
}

我会很高兴得到答案!

c# wpf checkbox datagrid
© www.soinside.com 2019 - 2024. All rights reserved.