|
using AngleSharp.DOM;
using AngleSharp.DOM.Html;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Media;
namespace Samples.ViewModels
{
public class QueryViewModel : RequestViewModel
{
ObservableCollection<Element> source;
String query;
HTMLDocument document;
Brush state;
Int32 result;
Int64 time;
public QueryViewModel()
{
state = Brushes.LightGray;
source = new ObservableCollection<Element>();
query = "*";
}
public Int32 Result
{
get { return result; }
set
{
result = value;
RaisePropertyChanged();
}
}
public Int64 Time
{
get { return time; }
set
{
time = value;
RaisePropertyChanged();
}
}
public String Query
{
get { return query; }
set
{
query = value;
ChangeQuery();
RaisePropertyChanged();
}
}
public Brush State
{
get { return state; }
set
{
state = value;
RaisePropertyChanged();
}
}
public ObservableCollection<Element> Source
{
get { return source; }
}
protected override async Task Use(Uri url, HTMLDocument document, CancellationToken cancel)
{
State = Brushes.LightGray;
this.document = document;
ChangeQuery();
await Task.Yield();
}
void ChangeQuery()
{
if (document == null)
return;
State = Brushes.LightGreen;
try
{
var sw = Stopwatch.StartNew();
var elements = document.QuerySelectorAll(query);
sw.Stop();
source.Clear();
foreach (var element in elements)
source.Add(element);
State = Brushes.White;
Time = sw.ElapsedMilliseconds;
Result = elements.Length;
}
catch(DOMException)
{
State = Brushes.LightPink;
}
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Florian lives in Munich, Germany. He started his programming career with Perl. After programming C/C++ for some years he discovered his favorite programming language C#. He did work at Siemens as a programmer until he decided to study Physics.
During his studies he worked as an IT consultant for various companies. After graduating with a PhD in theoretical particle Physics he is working as a senior technical consultant in the field of home automation and IoT.
Florian has been giving lectures in C#, HTML5 with CSS3 and JavaScript, software design, and other topics. He is regularly giving talks at user groups, conferences, and companies. He is actively contributing to open-source projects. Florian is the maintainer of AngleSharp, a completely managed browser engine.