Webリクエストを解析するカスタムクラスのMedinetParseを作成しました。解析されたデータは、my MainPageのmittSchemaListBoxというリストボックスに表示されます。私が今直面している問題は、リストボックスに何も表示されないMedinetParseという名前のカスタムクラスに解析メソッドを書き込む場合です。私がパースメソッドの最後のコード行にブレークポイントを置くと、私はmittSchemaListBox.ItemsSourceにすべての解析された項目があることがわかります。一方、私がMainPage.xaml.csに解析メソッドを移動すると、リストボックス内のすべての解析されたアイテムが表示されます。リストボックスの問題で、カスタムクラスからItemsSourceをメインページに出力できない
public void MainPage_Loaded(object sender, RoutedEventArgs e)
{
if (!App.ViewModel.IsDataLoaded)
{
App.ViewModel.LoadData();
}
MedinetWebRequest mittschema = new MedinetWebRequest();
MedinetParsing mittparse = new MedinetParsing();
mittschema.url = "https://medinet.se/cgi-bin/doctor.pl?action=login&customer=******&language=se";
Action callback =() => Dispatcher.BeginInvoke(() => mittparse.parseResults(mittschema.myresponse));
mittschema.getrequest(callback);
}
そして最後に、これは私のリストボックスである: - - :
<ListBox Margin="0,0,-12,0" Name="mittSchemaListBox" DataContext="{Binding}" ItemsSource="{Binding Path=Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0,0,0,17">
<!--Replace rectangle with image-->
<Canvas Height="100" Width="100" Margin="12,0,9,0" Background="#FFE5001B">
<TextBlock Text="{Binding Datum}" TextWrapping="Wrap" Height="100" Margin="0" HorizontalAlignment="Right" Width="100" />
</Canvas>
<StackPanel Width="311">
<TextBlock Text="{Binding Placering}" TextWrapping="Wrap" Margin="0,10" Style="{StaticResource PhoneTextExtraLargeStyle}" FontSize="36" TextAlignment="Center" FontWeight="Normal" />
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
をしようとしてここ
は私のMedinetParsingクラスここ
namespace WindowsPhonePanoramaApplication1
{
public class MedinetParsing : MainPage
{
//Defining class properties
public string Placering { get; set; }
public string Datum { get; set; }
//Defining class methods
public void parseResults(string myresponse)
{
if (string.IsNullOrEmpty(myresponse))
{
return;
}
//Initiating a listbox and add item to it
List<ItemViewModel> mittSchemaList = new List<ItemViewModel>();
//Using HtmlAgilityPack to parse the HTMLcode from the response
HtmlDocument htdoc = new HtmlDocument();
htdoc.LoadHtml(myresponse);
foreach (HtmlNode table in htdoc.DocumentNode.SelectNodes("//table[@class='list-medium']/tbody[1]/tr[@class]"))
{
//Removing ChildNode
table.ChildNodes.RemoveAt(3);
string itemValue = table.InnerText;
//Changing the parsed date into a DateTime
string d;
DateTime datum = DateTime.Parse(itemValue.Remove(11));
d = datum.ToString("D");
//Adding items to the listbox
mittSchemaList.Add(new ItemViewModel() { Datum = d, Placering = itemValue.Remove(0, 15) });
}
mittSchemaListBox.ItemsSource = mittSchemaList;
}
}
}
は、解析を開始するコードですここ数時間、この問題を解決してどこにも行かないために、私はここで尋ねることに決めました。誰かが私に問題点を教えてくれることを願っています。
いくつかの質問:リストボックスはどこで宣言されていますか?メインページに?なぜMainPageからMedinetParsingを継承していますか? MainPage_LoadedにMedinetParsingの新しいインスタンスを作成していますが、なぜそれが必要ですか?あなたの質問でこの瞬間を明確にしてください。 –
MainPage_LoadedのMedinetParingの新しいインスタンスは、parseResultsメソッドを開始することです。私はミスタイプの投稿コードを修正しました。私がClass MedinetParsing:MainPageを使用した理由は、.xamlのListBoxの名前であるmittSchemaListBoxにアクセスすることです。今度はMainPageのリストボックス宣言についての最後の質問に。私はどこに宣言するか分からない私のアクションコールバック...コード行の最後の行ですので、これを読むことはできません。 – DreamNet
よくMedinetParsingクラス:MainPageを使用してmittSchemaListBoxにアクセスする必要はありません。これは別のリストボックスであり、表示されているものとはまったく関係ありません。 –