Sådan kontrolleres tilstanden af ​​kontroller, der oprettes dynamisk ved hjælp af itemscontrol efter at have navngivet dem i itemscontrol wpf C #

Indlæg af Hanne Mølgaard Plasc

Problem



For min kode har jeg lavet flere kontroller af samme type (dvs. Checkbox) ved hjælp af itemscontrol bundet til en klasse 'MyClass'. Jeg har navngivet afkrydsningsfeltet kontrol som 'checkControl'. Nu, da jeg har flere afkrydsningsfeltkontrol oprettet i brugergrænsefladen, vil jeg kontrollere deres tilstand og skelne mellem dem. Hvordan skal jeg fortsætte? Jeg tænker på at bruge findvisualchild & findvisualparent? Men jeg har ikke nogen ide om, hvordan man bruger det?


<ItemsControl Name="myList">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid Margin="30,80,10,0">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="100" />
                </Grid.ColumnDefinitions>

                <Border x:Name="tempBorder" BorderBrush="LightGray" BorderThickness="2,2,2,2" CornerRadius="4,4,4,4" Margin="0,-30,-60,-30"
                                            Background="LightGray">
                    <StackPanel Orientation="Horizontal" Background="Transparent" Margin="0">
                        <StackPanel Background="White" Orientation="Horizontal">
                            <CheckBox x:Name="checkControl" Margin="7,7,0,0" Checked="CheckBox\_Checked" Unchecked="CheckBox\_Unchecked">
                                <WrapPanel>
                                    <Image Source="/Images/myimage.png" Margin="0,10,0,0"></Image>
                                        <StackPanel Orientation="Vertical" VerticalAlignment="Center">
                                            <TextBlock Text="{Binding Disk}" FontFamily="roboto" FontSize="14"/>
                                            <Rectangle Width="340" Height="1" Margin="0,5,5,5" Fill="Black"/>
                                            <TextBlock>
                                                <Run Text="Item:" FontFamily="roboto" FontSize="14"/>
                                                <Run Text="{Binding Path=Name, StringFormat=' {0} Jr.'}" FontSize="20" Foreground="Orange"
                                                                 FontWeight="DemiBold"/>
                                            </TextBlock>
                                        </StackPanel>
                                    </WrapPanel>
                                </CheckBox>
                            </StackPanel>
                            <StackPanel Orientation="Vertical" Background="LightGray" Margin="0" HorizontalAlignment="Center" Width="765"
                                                        VerticalAlignment="Center">
                                <TextBlock Text="Select the Option:" Margin="15,7,0,7" FontFamily="roboto"/>
                                <ComboBox x:Name="comboControl" Margin="15,5,0,7" Width="750" SelectionChanged="comboControl\_SelectionChanged"/>
                            </StackPanel>
                        </StackPanel>
                    </Border>
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>


Til min backend C # kode:
klasse


 public class MyClass
{
    public string Disk { get; set; }

    public string Name { get; set; }

    public MyClass()
    {

    }

    public MyClass(string album, string name)
    {
        this.Disk = album;
        this.Name = name;
    }
}


I min Xaml.cs


public ObservableCollection<MyClass> StudentDisk { get; set; }
//somecode
StudentDisk.Add(new MyClass("Disk 4 ", "John"));   //For populating
//somecode
myList.ItemsSource = StudentDisk;

Bedste reference


det er muligt at differentiere checkboxer ved deres DataContext, hvilket skal være unikt:


void CheckBox\_Checked(object sender, RoutedEventArgs e)
{
    var checkbox = (CheckBox)sender;
    var item = (MyClass)checkbox.DataContext;
    MessageBox.Show(item.Disk + " " + item.Name);
}