动态添加label / checkBox-Combo并将代码放在后面

时间:2019-05-03 10:51:34

标签: c# wpf

我已经建立了一个动态生成的标签/复选框列表。

label-content从带有一些应用程序名称的列表中获取其内容。该复选框共享一个CheckBox_Click-Event,当我点击其中一个复选框时触发。我现在遇到的问题是,我无法确定单击了哪个复选框。因为我生成控件,所以无法通过绑定在控件后面加上名称。我不太熟悉通过代码创建gui的过程。希望你们能对我有所帮助。

// This part builds my label/combo-List through a FileInfo-List

Fields = new System.Collections.ObjectModel.ObservableCollection<Field>();
foreach (var app in GetPrograms())
{
  Fields.Add(new Field() {Name = app.Name, Length = 100, Required = true});
}
FieldsListBox.ItemsSource = Fields;
// Here i got the Click-Event.. but i can't identify which Checkbox is clicked

private void CheckBox_Click(object sender, RoutedEventArgs e)
{
  CheckBox senderChk =  sender as CheckBox;

  switch (senderChk.Name)
  {
    //case "checkBox1": // do something
    //case "checkBox2": // do something
  }
}
<!-- And finally the xaml-Code, note the Bindings on label and checkbox -->
    <Grid>
        <ListBox x:Name="FieldsListBox">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Label Content="{Binding Name}" VerticalAlignment="Center"></Label>
                        <CheckBox IsChecked="{Binding Checked}" Click="CheckBox_Click" Margin="5,0,0,0"></CheckBox>
                    </StackPanel>

因为我已经有了一个文件名列表,所以我认为我可以在复选框上绑定名称,因此我知道单击了哪个复选框并可以管理正确的程序名。

1 个答案:

答案 0 :(得分:0)

您这样做是为了将选中的属性绑定到comboBox。

<CheckBox IsChecked="{Binding Checked}" ... ></CheckBox>

执行相同操作,然后将组合框的属性Uid(用于标识WPF中的控件)绑定如下:

<CheckBox ... Uid="{Binding Name}" ... ></CheckBox>

并在您的交换机中使用它。