每次运行我的应用程序时都会出现System.StackOverflowException错误。此错误位于History类的最后一行。下面:
public class userHistory
{
public string strTimeDate { get; set; }
public string strUrl { get; set; }
public List<userHistory> lstUserHistory { get; set; }
public userHistory(string timedate, string url)
{
lstUserHistory.Add(new userHistory(timedate, url));
}
}
我的MainPage代码:
public List<userHistory> lstUserHistory;
public userHistory selectedHistory;
public MainPage()
{
InitializeComponent();
listBox.DataContext = lstUserHistory;
}
private void getHistory(string url)
{
string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
userHistory usrHistory = new userHistory(time, url);
lstUserHistory.Add(usrHistory);
listBox.DataContext = null;
listBox.DataContext = lstUserHistory;
}
private void listBox_Tap(object sender, GestureEventArgs e)
{
selectedHistory = listBox.SelectedValue as userHistory;
MessageBox.Show(selectedHistory.strUrl);
browserSearch(selectedHistory.strUrl);
}
XAML
<Grid>
<ListBox ItemsSource="{Binding}" Foreground="RoyalBlue" Name="listBox" TabIndex="10" Tap="listBox_Tap">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" Margin="0,329,0,367" >
<TextBlock Text="{Binding strDateTime}" FontSize="15" Margin="51,1,0,1"/>
<TextBlock Text="{Binding strUrl}" FontSize="28" Margin="51,1,0,1"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
我认为错误可能是因为getHistory中发生了什么。可以使用相同的数据将此方法称为muitply times。我想要的是将数据存储在List中,这可以轻松添加新的历史记录或删除它们。然后只需在列表框中显示。
提前谢谢你:)
如果您需要更多详细信息,请发表评论,我将很乐意进一步详细解释:)
答案 0 :(得分:2)
查看userHistory
的这一部分:
public List<userHistory> lstUserHistory { get; set; }
public userHistory(string timedate, string url)
{
lstUserHistory.Add(new userHistory(timedate, url));
}
这里有两个错误:
lstUserHistory.Add
绝对为空时,构造函数调用lstUserHistory
目前尚不清楚为什么List<userHistory>
中的MainPage代码和都有userHistory
。我认为你需要更仔细地考虑你正在建模的数据,以及真正所属的地方。
我怀疑你的userHistory
课程看起来应该更像这样:
public sealed class HistoryEntry
{
private readonly DateTime timestamp;
private readonly string url;
public DateTime Timestamp { get { return timestamp; } }
public string Url { get { return url; } }
public HistoryEntry(DateTime timestamp, string url)
{
this.timestamp = timestamp;
this.url = url;
}
}
注意: