C# 列表框问题可以';t从自定义类获取要在主页中输出的ItemsSource
我创建了一个名为MedinetParse的自定义类,用于解析webrequest。解析后的数据应该显示在my MainPage中名为mittSchemaListBox的列表框中。我现在面临的问题是,如果我在名为MedinetParse的自定义类中编写解析方法,列表框将不会显示任何内容。尽管当我在parse方法的最后一行代码中放置断点时,我可以看到mittSchemaListBox.ItemsSource拥有所有解析的项。同时,如果我将解析方法移动到MainPage.xaml.cs中,那么我将在列表框中看到所有解析的项 这是我的MedinetParsing课程C# 列表框问题可以';t从自定义类获取要在主页中输出的ItemsSource,c#,windows-phone-7,listbox,C#,Windows Phone 7,Listbox,我创建了一个名为MedinetParse的自定义类,用于解析webrequest。解析后的数据应该显示在my MainPage中名为mittSchemaListBox的列表框中。我现在面临的问题是,如果我在名为MedinetParse的自定义类中编写解析方法,列表框将不会显示任何内容。尽管当我在parse方法的最后一行代码中放置断点时,我可以看到mittSchemaListBox.ItemsSource拥有所有解析的项。同时,如果我将解析方法移动到MainPage.xaml.cs中,那么我将在列
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;
}
}
}
最后这是我的列表框:-
<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>
在过去的几个小时里,我一直在试图解决这个问题,但一事无成,我决定在这里提问。希望有人能告诉我问题出在哪里。好的,根据你的评论,你做得不对。试试这个:
(或考虑将此代码移到VIEMDEM,因为您在这里使用它)
编辑public class MedinetParsing // : MainPage -- we don't need this inheritance
{
private readonly MainPage _mainPage;
public MadinetParsing(MainPage mainPage)
{
_mainPage = mainPage;
}
// your code here
// use the next line instead of commented one
// mittSchemaListBox.ItemsSource = mittSchemaList;
_mainPage.mittSchemaListBox.ItemsSource = mittSchemaList;
}
但是,正如我前面所说的,最好的解决方案是在ViewModel中进行解析,并使用绑定来填充列表框。昨晚无法回答我的问题,因此下面是答案 又一次,经过几个小时的反复使用我的代码,我找到了一个适合我的应用程序的解决方案。解决方案是我在MedinetParsing类中更改了这行代码
mittSchemaList.Add(new ItemViewModel() { Datum = d, Placering = itemValue.Remove(0, 15) });
关于这一点:
App.ViewModel.Items.Add(new ItemViewModel() {Datum=d,Placering=itemValue.Remove(0,15)});
删除了这行代码:-
mittSchemaListBox.ItemsSource = mittSchemaList;
现在它工作正常,我很高兴;)。
希望这将帮助其他人,如果他们面临这样的问题
您的几个问题:列表框在哪里声明?在主页上?为什么要从主页继承MedinetParsing?您正在加载的主页中创建MedinetParsing的新实例,为什么需要它请在您的问题中澄清这一时刻让我首先说,加载的主页中的MedinetParing的新实例是启动parseResults方法。我更正了张贴的代码,它是漏打的。我使用类MedinetParsing:MainPage的原因是为了访问mittSchemaListBox,它是.xaml中列表框的名称。现在转到主页上关于Listbox declaretion的最后一个问题。我不知道该在哪里声明,因为我的动作回调。。。是要执行的最后一行代码,因此在此之后的任何代码行都不会被读取。那么,您不应该使用类MedinetParsing:MainPage来访问mittSchemaListBox,它只是另一个列表框,它与所显示的完全无关。那么如何从自定义类中访问mittSchemaListBox?不要在自定义类中执行此操作,而是在MainPage类中执行此操作。请看下面我的答案。我知道我可以在主页上完成整个解析,而且它正在工作。虽然我仍然想知道是否有某种方法可以解析另一个类中的数据?感谢您的帮助和时间,我刚刚找到了一种非常合适的方法。我会将其作为答案发布。现在无法回答我的问题,但这是答案,我稍后会更新。又一次,经过几个小时的反复使用我的代码,我找到了一个适合我的应用程序的解决方案。解决方案是我在MedinetParsing类'code'mittSchemaList.Add(new ItemViewModel(){Datum=d,placeing=itemValue.Remove(0,15)})中更改了这一行代码用这个代码“code:-“code”App.ViewModel.Items.Add(newitemviewmodel(){Datum=d,placeing=itemValue.Remove(0,15)});'code'删除了这行代码:-'code'mittSchemaListBox.ItemsSource=mittSchemaList;'代码'
App.ViewModel.Items.Add(new ItemViewModel() {Datum=d,Placering=itemValue.Remove(0,15)});
mittSchemaListBox.ItemsSource = mittSchemaList;