我已经在XAML中使用MVVM模式绑定了属性变量和Listbox的ItemSource之间的一个列表框。
XAML:
public List<CheckBox> SrcPermissionList= new List<CheckBox>();
CheckBox ckbox = new CheckBox();
SrcPermissionList.Add(ckbox);
视图模型:
Application.Current.Dispatcher.Invoke(new Action(delegate ...
然后它导致STA线程访问问题,因为我试图以动态方式添加复选框。至于它由服务+服务器获取的数据。所以我使用Dispatch代码来解决这个问题。
#!/usr/bin/perl
use strict;
use Net::Ping;
## Check for an internet connection by pinging Google
my $p = Net::Ping->new("icmp");
while(1){
printf "Checking internet connection.....\n";
if ($p->ping("172.217.4.132")){
printf "Internet connection is active\n";
sleep 1;
last;
}
else{
printf "Internet connection not established.\n";
sleep 5*5;
}
}
## Determine the gateway IP address of the network
my $IP = "192.168.1.1";
system( "nmap -vv $IP/24 -p 139 | grep open" );
毕竟,它看起来似乎没有用,但是当我调试时,它实际上有数据。在尝试操作列表框(例如单击它或向下滚动)之前,它不会呈现任何内容,如下所示。
Image of listbox which is not working
我不知道如何在不触及列表框的情况下刷新绑定列表框。 数据显示至少我只点击一次,或只滚动1个刻度。 我认为它可能在线程中存在问题。和UI线程不知道itemsource何时到来。 我做错了什么?
答案 0 :(得分:2)
您应该使用ObservableCollection
ObservableCollection是一个集合,它允许集合外部的代码知道何时发生对集合的更改(添加,移动,删除)。
private ObservableCollection<Type> collection;