C# UWP-从正在运行的异步方法刷新ListView
我已经编写了一个方法,它发送UDP广播,并在循环中接收结果,然后立即写入C# UWP-从正在运行的异步方法刷新ListView,c#,xaml,listview,uwp,C#,Xaml,Listview,Uwp,我已经编写了一个方法,它发送UDP广播,并在循环中接收结果,然后立即写入列表。因为我使用的是ReceiveAsync(),所以它是异步运行的 我的问题是:每次循环向列表中添加字符串时,如何刷新UI中的ListView。因此,我希望结果在列表中出现时立即显示在屏幕上 代码 XAML列表视图代码 <ListView x:Name="lbIps" HorizontalAlignment="Left" Height="174" Margin="450,151,0,0" VerticalAlignm
列表
。因为我使用的是ReceiveAsync()
,所以它是异步运行的
我的问题是:每次循环向列表中添加字符串时,如何刷新UI中的ListView。因此,我希望结果在列表中出现时立即显示在屏幕上
代码
XAML列表视图代码
<ListView x:Name="lbIps" HorizontalAlignment="Left" Height="174"
Margin="450,151,0,0" VerticalAlignment="Top" Width="298" />
首先,您应该使用数据绑定将数据绑定到
列表视图
:
<ListView x:Name="lbIps" ItemsSource="{x:Bind IpList}" ... />
现在,属性在开始时已初始化,不会更改。如果需要,您可以使用
Clear()
方法删除集合中的所有元素,而不是设置新实例。首先,您应该使用数据绑定将数据绑定到列表视图中:
<ListView x:Name="lbIps" ItemsSource="{x:Bind IpList}" ... />
现在,属性在开始时已初始化,不会更改。如果需要,可以使用Clear()
方法删除集合中的所有元素,而不是设置新实例。如何显示ListView?如果要将UI绑定到ipList,则可能只需在更新列表时调用OnPropertyChanged(“ipList”)
。在my MainApp.xaml.cs中,我运行异步UDP方法。完成/取消后,我使用lvIp.ItemsSource=UDPMethodClass.IpList;。因此,它会在取消我的任务后显示结果。您也应该发布该代码,并将XAML发布到希望显示列表的位置。实际上,如果您希望在填充ipList时更新此项,则应在XAML中绑定itemsSource,并在需要更新时调用OnPropertyChanged()
。使用ObservableCollection作为项目源。@Lili:如何在XAML中绑定itemsSource以及在何处/如何调用OnPropertyChanged()?Romasz:如果我使用ObservableCollection作为ItemsSource,它就不能转换为列表,我需要它作为参数。如果我用toList()转换它,它能工作吗?如何显示ListView?如果要将UI绑定到ipList,则可能只需在更新列表时调用OnPropertyChanged(“ipList”)
。在my MainApp.xaml.cs中,我运行异步UDP方法。完成/取消后,我使用lvIp.ItemsSource=UDPMethodClass.IpList;。因此,它会在取消我的任务后显示结果。您也应该发布该代码,并将XAML发布到希望显示列表的位置。实际上,如果您希望在填充ipList时更新此项,则应在XAML中绑定itemsSource,并在需要更新时调用OnPropertyChanged()
。使用ObservableCollection作为项目源。@Lili:如何在XAML中绑定itemsSource以及在何处/如何调用OnPropertyChanged()?Romasz:如果我使用ObservableCollection作为ItemsSource,它就不能转换为列表,我需要它作为参数。如果我用toList()转换它,它能工作吗?我试过这个,你是怎么解释的。但是现在我在ipList中得到了一个异常;它说:应用程序调用了一个为另一个线程封送的接口。实际上,我现在已经修复了它,它完全可以工作了!我只需要将ipList.Add(..)更改为:wait CoreApplication.MainView.corefown.Dispatcher.RunAsync(coredipatcherpriority.Normal,()=>{ipList.Add(message);});太好了:-)。在UI线程上使用ObservableCollection
非常重要,否则会出现以下异常:-)。快乐编码!我试过了,你是怎么解释的。但是现在我在ipList中得到了一个异常;它说:应用程序调用了一个为另一个线程封送的接口。实际上,我现在已经修复了它,它完全可以工作了!我只需要将ipList.Add(..)更改为:wait CoreApplication.MainView.corefown.Dispatcher.RunAsync(coredipatcherpriority.Normal,()=>{ipList.Add(message);});太好了:-)。在UI线程上使用ObservableCollection
非常重要,否则会出现以下异常:-)。快乐编码!
<ListView x:Name="lbIps" ItemsSource="{x:Bind IpList}" ... />
ObservableCollection<string> IpList => ND2.ipList;
public ObservableCollection<string> ipLIst {get;} = new ObservableCollection<string>();