繁体   English   中英

WPF - 如何获取绑定到ListBoxItem的对象

[英]WPF - How do I get an object that is bound to a ListBoxItem back

这就是我想做的事情。 我从数据库中获取对象列表,并将此列表绑定到ListBox控件。 ListBoxItems包含一个文本框和一个按钮。 这就是我想出的。 到目前为止,它按预期工作。 该对象有许多属性,如ID,Name。 如果我单击ListBoxItem中的按钮,则应该从ListBox和数据库中删除Item ...

<ListBox x:Name="taglistBox">    
                        <ListBox.ItemContainerStyle>
                            <Style TargetType="{x:Type ListBoxItem}">
                                <Setter Property="HorizontalAlignment" Value="Stretch"/>
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate TargetType="ListBoxItem">
                                            <ContentPresenter HorizontalAlignment="Stretch"/>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                                <Setter Property="Tag" Value="{Binding TagSelf}"></Setter>
                            </Style>
                        </ListBox.ItemContainerStyle>
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <Grid HorizontalAlignment="Stretch">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto"/>
                                        <ColumnDefinition/>
                                    </Grid.ColumnDefinitions>
                                    <Button Grid.Column="0" Name="btTag"  VerticalAlignment="Center"  Click="btTag_Click" HorizontalAlignment="Left">
                                        <Image Width="16" Height="16" Source="/WpfApplication1;component/Resources/104.png"/>
                                    </Button>
                                    <TextBlock Name="tbtagBoxTagItem" Margin="5" Grid.Column="1" Text="{Binding Name}" VerticalAlignment="Center" />                                        
                                 </Grid>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>

Textblock.Text绑定到object.Name,ListBoxItem.Tag绑定到object.TagSelf(它只是对象本身的副本)。

现在我的问题

  1. 如果我单击listboxItem中的按钮,我如何获取listboxitem以及绑定到它的对象。 为了从数据库中删除对象,我必须以某种方式检索它。 我试过类似的东西

    ListBoxItem lbi1 =
    (ListBoxItem中)(taglistBox.ItemContainerGenerator.ContainerFromItem(taglistBox.Items.CurrentItem)); ObjectInQuestion t =(ObjectInQuestion)lbi1.Tag;

  2. 如果Itemssource更改,有没有办法自动更新ListBox的内容? 现在我正在实现这个目标

    taglistBox.ItemsSource = null;
    taglistBox.ItemsSource = ObjectInQuestion;

我很感激你能给予的任何帮助:D提前谢谢

每个ListBoxItem都将数据绑定集合中的相应项作为DataContext。 ListBoxItem.ItemTemplate中的每个控件都将继承DataContext。 要获取单击按钮后面的对象,可以在单击事件处理程序中执行以下操作:

MyClass item = (MyClass)(sender as Button).DataContext;

要使数据源中的更改自动更新到列表框,可以使用ObservableCollection。

使用ObservableCollection查看即时自动更改

使用DataContext获取SelectedItem

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    var btn = sender as Button; 
    myListBox.SelectedItem = btn.DataContext; 
}

您应该在viewmodel中将SelectedItem属性绑定到列表框的selectedItem。 从ObservableCollection中删除该特定项。 您的列表框将反映更改。

问题2:使用ObservableCollection。 这实现了INotifyCollectionChanged,因此在集合更改时将添加和删除项目。

问题1:将发件人转换为按钮并使用它的DataContext。 这将是它所绑定的项目。 如果您还需要获取ListBoxItem本身,您可以使用VisualTreeHelper.GetParent()来搜索树。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM