c# - 如何清除 WPF 列表框?

标签 c# wpf listbox

Hai 我正在使用 wpf 列表框,我在调用重新加载数据函数时无法清除列表,我只想在运行时重新加载新数据,而页面加载时它会正确加载数据,当我刷新新数据时在项目源中获取我可以在 Debug模式下看到,但列表框中没有新数据,旧数据保留在列表中,我什至无法清除,当我调用 list.items.clear() 时,它会抛出异常和应用程序崩溃,我尝试了很多方法,我的 XAML 绑定(bind)是否有问题,以下是我的代码。

<DataTemplate x:Key="listBoxTemplate">
                <StackPanel Margin="3">
                    <DockPanel >
                        <TextBlock FontWeight="Bold" Text="{Binding Name}" DockPanel.Dock="Left" Margin="5,0,10,0"/>
                        <TextBlock Text="  " />
                         <TextBlock Text="{Binding Percnt}" Foreground="Green" FontWeight="Bold" />
                   </DockPanel>                       
                </StackPanel>
            </DataTemplate>

我的列表框

 <ListBox Height="898" Name="lstEntity" Width="291" ItemTemplate="{StaticResource listBoxTemplate}" SelectionChanged="lstEntity_SelectionChanged"/>

绑定(bind)代码

   lstEntity.ItemsSource = sei.getNames();

getNames() 函数只是将数据作为列表返回,其中没有任何特殊代码,如何解决这个问题。

最佳答案

获得此类行为的最佳方法是使用 DependencyProperty 和绑定(bind)。

在你的类文件中像这样创建 DP:

    #region MyList dependency property
    public static readonly DependencyProperty MyListProperty = DependencyProperty.Register("MyList", typeof(ObservableCollection<String>), typeof(Window1));

    public ObservableCollection<String> MyList
    {
        get { return (ObservableCollection<String>) GetValue(MyListProperty); }
        set { SetValue(MyListProperty, value); }
    }
    #endregion

然后在 XAML 中像这样绑定(bind)到该 DP:

<ListBox ItemSource={Binding Path=MyList, ElementName=MyWindow} Height="898" Name="lstEntity" Width="291" ItemTemplate="{StaticResource listBoxTemplate}" SelectionChanged="lstEntity_SelectionChanged"/>

其中“MyWindow”是 XAML 文件中根窗口的 x:Name(当然,您也可以像 MVVM 模式一样使用数据上下文:)

然后,如果您想从代码中添加/删除项目,您只需直接访问列表即可:

MyList.Clear();
MyList.Add("My New String");

当然,您还需要将集合的通用类型更改为您自己的类...

关于c# - 如何清除 WPF 列表框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3252287/

相关文章:

wpf - 在代码隐藏中测试 ListBox 的滚动条可见性

c# - 如何在 chrome 隐身模式下打开 URL

c# - 在 C# 中,如何更改不可继承的类中属性的 DefaultValue 属性?

wpf - 如何在 WPF XAML 中的多重绑定(bind)中使用 stringformat

ListBoxItem MVVM 命令绑定(bind)中的 WPF ListBox 命令

excel - 在excel中链接列表框和工作表以进行删除-VBA

c# - 如何在 MVC 4 应用程序中进行单用户登录

c# - 如何将大中频条件转换为小中频

c# - WPF MultiBinding TextBox 文本以编程方式

c# - 如何将多个 View 模型绑定(bind)到 MVVM wpf 中的单个 xaml 文件?