簡體   English   中英

如何獲取WPF ListBox中的選中項?

[英]How to get checked items in a WPF ListBox?

我有一個WPF ListBox,我有復選框,但是獲取被檢查項目列表的方法是什么?

ListBox是綁定到Dictionary<T>

這是XAML:

<Window x:Class="WpfApplication.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1"
        Height="300"
        Width="300">
    <Grid Margin="10">
        <ListBox ItemsSource="{DynamicResource Nodes}" Grid.IsSharedSizeScope="True" x:Name="MyList">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition SharedSizeGroup="Key" />
                            <ColumnDefinition SharedSizeGroup="Name" />
                            <ColumnDefinition SharedSizeGroup="Id" />
                        </Grid.ColumnDefinitions>
                        <CheckBox Name="NodeItem" Click="OnItemChecked">
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Margin="2" Text="{Binding Value.Name}" Grid.Column="1"/>
                                <TextBlock Margin="2" Text="-" Grid.Column="2"/>
                                <TextBlock Margin="2" Text="{Binding Value.Id}" Grid.Column="3"/>
                            </StackPanel>
                        </CheckBox>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>

這通常通過ViewModel完成,ViewModel是一種數據結構,它向模型(您的數據)和特定於視圖的信息(如是否檢查項目)公開視圖(通過DataContext)。

在你的例子中,你的詞典不會是一個詞典,而是一個詞典,而PersonViewModel則有一個IsChecked屬性和一個指向模型的Person屬性。

否則,您必須在模板中找到復選框或從復選框中轉到列表框項目,這很復雜。

Josh Smith有一篇關於codeproject的文章 ,應該解釋你需要什么。 他正在討論TreeView但原理也將移植到CheckBox

這里還有一個非常有趣的方法使用DataTemplate並將CheckBox.IsChecked屬性綁定到ListBoxItem.IsSelected屬性。

如果您是MVVM的新手Jason Dolinger有一個關於這個主題的精彩視頻。 它將引導您完成從使用代碼隱藏文件到完整MVVM模式(包括依賴注入和測試)的過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM