Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UWP-从正在运行的异步方法刷新ListView_C#_Xaml_Listview_Uwp - Fatal编程技术网

C# UWP-从正在运行的异步方法刷新ListView

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

我已经编写了一个方法,它发送UDP广播,并在循环中接收结果,然后立即写入
列表
。因为我使用的是
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>();