我的代码从IIS下载XML文件。 XML被处理为一个列表,该列表已绑定到我的View XAML代码。
当我使用refresh命令刷新列表时,我希望IsRefreshing
命令在更新列表时为true。
IsRefreshing
停留在true
上,我的列表也没有更新。
你能帮我吗?
这是我的代码:
// ViewModel
public class ProcessesPageViewModel : BaseViewModel
{
DownloadProcesses downloadProcesses;
public Command LoadItemsCommand { get; set; }
public ProcessesPageViewModel()
{
LoadItemsCommand = new Command(ExecuteLoadItemsCommand);
CreateList();
}
void CreateList()
{
downloadProcesses = new DownloadProcesses();
var allProcesses = downloadProcesses.DownloadXML();
ProcessList = allProcesses.Processes;
}
void ExecuteLoadItemsCommand()
{
if (IsBusy)
return;
IsBusy = true;
try
{
CreateList();
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
finally
{
IsBusy = false;
}
}
private Process[] _processList;
public Process[] ProcessList
{
get => _processList;
set => SetValue(ref _processList, value);
}
}
}
// Download Process
public class DownloadProcesses : BaseViewModel
{
public ProcessQuery DownloadXML()
{
IsBusy = true;
XmlSerializer serializer = new XmlSerializer(typeof(ProcessQuery));
string xml;
using (WebClient client = new WebClient())
{
xml = client.DownloadString("http://x.x.x.x/test.xml");
}
using (StringReader reader = new StringReader(xml))
{
IsBusy = false;
return (ProcessQuery)serializer.Deserialize(reader);
}
}
}
// Xaml
<ListView x:Name="ProcessesListView"
ItemsSource="{Binding ProcessList}"
VerticalOptions="Center"
HasUnevenRows="True"
RefreshCommand="{Binding LoadItemsCommand}"
IsPullToRefreshEnabled="True"
ItemSelected="OnItemSelected">
IsRefreshing="{Binding IsBusy, Mode=TwoWay}"
答案 0 :(得分:0)
这可能是您看到的事件的顺序:
尝试将IsRefreshing绑定模式设置为OneWay,然后查看是否可行(当然,请确保IsBusy正在引发OnPropertyChanged事件)。您还可以假设IsBusy在命令中为true,并且仅在完成后将其设置为false。
如果仍然遇到问题,请考虑对列表的IsRefreshing使用单独的属性,而不要使用现有的IsBusy属性。