XAML 在visual basic中有没有一种动态命名/控制复选框的方法?

rqqzpn5f  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(207)

我有XAML代码,它创建了一个有两列的列表视图;第一列是基于第二列中项目数量的复选框。代码编写方式的问题是复选框没有自己的名称(据我所知)。如果我重命名对象,那么所有15个复选框将被命名为相同的东西,不允许我控制发生了什么,如果任何一个被选中(我想)。有没有一种方法我可以编码到它们彼此独立控制的地方?
这是我迄今为止用来创造的

<Grid>
   <ListView Grid.Row="2" Grid.Column="2" ItemsSource="{Binding XPath=..//@ParentAttribute}">
      <ListView.View>
         <GridView>
            <GridViewColumn Header="Selection">
               <GridViewColumn.CellTemplate>
                   <DataTemplate>
                      <CheckBox Name="Check"/>
                   </DataTemplate>
               </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn>
            </GridViewColumn>
         </GridView>
      </ListView.View>
   </ListView>
</Grid>
v440hwme

v440hwme1#

您可以将事件处理程序添加到CheckBox:

<DataTemplate>
    <CheckBox Name="Check"
                Checked="Check_Checked" />
</DataTemplate>

在代码隐藏中,这将创建一个Check_Checked事件处理程序:

Private Sub Check_Checked(sender As Object, e As RoutedEventArgs)

    If e.Source.GetType = GetType(CheckBox) Then

        Dim checkBox As CheckBox = CType(e.Source, CheckBox)
        Dim xmlElement As XmlElement = CType(checkBox.DataContext, XmlElement)

        MsgBox(xmlElement.OuterXml)

    End If

End Sub

一旦这个事件被引发,被选中的CheckBox的DataContext将是一个XmlElement。从这个你应该能够从被点击的项目中检索任何你需要的东西。
下面是我用从this Microsoft example获得的XML构建的一个简单的WPF窗口:

<Window.Resources>

    <XmlDataProvider x:Key="InventoryData"
                     XPath="Inventory/Books">
        <x:XData>
            <Inventory xmlns="">
                <Books>
                    <Book ISBN="0-7356-0562-9"
                          Stock="in"
                          Number="9">
                        <Title>XML in Action</Title>
                        <Summary>XML Web Technology</Summary>
                    </Book>
                    <Book ISBN="0-7356-1370-2"
                          Stock="in"
                          Number="8">
                        <Title>Programming Microsoft Windows With C#</Title>
                        <Summary>C# Programming using the .NET Framework</Summary>
                    </Book>
                    <Book ISBN="0-7356-1288-9"
                          Stock="out"
                          Number="7">
                        <Title>Inside C#</Title>
                        <Summary>C# Language Programming</Summary>
                    </Book>
                    <Book ISBN="0-7356-1377-X"
                          Stock="in"
                          Number="5">
                        <Title>Introducing Microsoft .NET</Title>
                        <Summary>Overview of .NET Technology</Summary>
                    </Book>
                    <Book ISBN="0-7356-1448-2"
                          Stock="out"
                          Number="4">
                        <Title>Microsoft C# Language Specifications</Title>
                        <Summary>The C# language definition</Summary>
                    </Book>
                </Books>
                <CDs>
                    <CD Stock="in"
                        Number="3">
                        <Title>Classical Collection</Title>
                        <Summary>Classical Music</Summary>
                    </CD>
                    <CD Stock="out"
                        Number="9">
                        <Title>Jazz Collection</Title>
                        <Summary>Jazz Music</Summary>
                    </CD>
                </CDs>
            </Inventory>
        </x:XData>
    </XmlDataProvider>

</Window.Resources>

<Grid>

    <Grid>

        <ListView Grid.Row="2"
                  Grid.Column="2">
            <ListView.ItemsSource>
                <Binding Source="{StaticResource InventoryData}"
                         XPath="*[@Stock='out'] | *[@Number>=8 or @Number=3]" />
            </ListView.ItemsSource>

            <ListView.View>

                <GridView>

                    <GridViewColumn>
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock FontSize="12"
                                           Foreground="Red">
                                    <TextBlock.Text>
                                        <Binding XPath="Title" />
                                    </TextBlock.Text>
                                </TextBlock>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>

                    <GridViewColumn Header="Selection">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox Name="Check"
                                          Checked="Check_Checked" />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>

                </GridView>
            </ListView.View>
        </ListView>
    </Grid>

</Grid>

相关问题