[英]How to clear WPF listbox?
Hai正在使用wpf列表框,調用重載數據功能時無法清除列表,我只想在運行時重載新數據,而頁面加載時它會正確加載數據,刷新時會提取新數據itemsource我可以在調試模式下看到它,但是列表框中沒有新數據,舊數據仍保留在列表中,我什至無法清除,當我調用list.items.clear()時,它會引發異常和應用程序崩潰,我嘗試了很多方法,是我的XAML綁定中的任何問題,以下是我的代碼。
<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"/>
綁定碼
lstEntity.ItemsSource = sei.getNames();
getNames()函數僅將數據作為列表返回,其中沒有任何特殊代碼,如何解決此問題。
獲得這種行為的最好方法是使用DependencyProperty和綁定。
在類文件中創建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中像這樣綁定到該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");
當然,您還需要將集合的通用類型更改為您自己的類...
您是否曾經通過直接添加到Items集合或僅通過ItemsSource填充ListBox?
如果是后者,則將ItemsSource設置為null並將其設置為重新加載。
在您提供例外情況和其他詳細信息之前,您無法說出您的案子是什么原因。 但是建議做某事的更好方法。
getnames
方法返回IEnumerable。 現在,您可以更改ObservableCollection,以查看ListBox中的更改。
在您這樣做之前:
lstEntity.ItemsSource = sei.getNames();
清除列表框itemssource:
lstEntity.ItemsSource = "";
如果使用的是MVVM模式,請向ViewModel中添加一個屬性:
public IEnumerable Names {
get { return sei.getNames() as IEnumerable; }
}
然后,在您的XAML中,將ItemsSource編寫為:
<ListBox ... ItemsSource="{Binding Names}" ... />
每當“名稱”列表的內容發生更改時,都將引發PropertyChanged事件; 這將告訴WPF系統刷新您的ListBox:
PropertyChanged(this, new PropertyChangedEventArgs("Names");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.