初めての発信者、長年の聞き手...
私は一日中データバインディングの問題に頭を悩ませていて、途方に暮れています。Windows Phone 8 の LongListSelector を使用してリンクのリストを表示しようとしています。
リンクを表すクラスがあります (ExternalLink)
リンクのコレクションを表すクラスがあります (ExternalLinkList)
コレクションに問題なく正しいデータが読み込まれることを確認しました。以下のコードを考えると、誰かが私が今見ている気が遠くなるほど明白な問題であると私が確信していることを教えてもらえますか?
public class ExternalLink
{
/// <summary>
/// Property for link title
/// </summary>
public String Title { get; set; }
/// <summary>
/// Property for link text
/// </summary>
public String Text { get; set; }
/// <summary>
/// Property for link image name.
/// </summary>
public String ImageName { get; set; }
/// <summary>
/// Property for item text
/// </summary>
public String Link { get; set; }
public ExternalLink(string title, string text, string imagename, string link)
{
Title = title;
Text = text;
ImageName = imagename;
Link = link;
}
public ExternalLink()
{
// TODO: Complete member initialization
}
public Uri Url
{
get
{
Uri uri = new Uri(Link, UriKind.RelativeOrAbsolute);
return uri;
}
set
{
Url = value;
}
}
}
コレクションコード (更新):
public class ExternalLinkList
{
private ObservableCollection<ExternalLink> list;
public ObservableCollection<ExternalLink> List
{
get
{
if (list == null)
{
list = new ObservableCollection<ExternalLink>();
}
return list;
}
set
{
if (list != value)
{
list = value;
}
}
}
public ExternalLinkList()
{
}
}
ビュー モデル コード:
public partial class LinkListPage : PhoneApplicationPage
{
public static ExternalLinkList List {get; set;}
public static Uri LinkListXML = new Uri("/GenericRssReader;component/pagelinklist.xml", UriKind.Relative);
public static string imagePathTo = "/GenericRssReader;Assets/LinkImages/";
public LinkListPage()
{
InitializeComponent();
Loaded += LinkListPage_Loaded;
}
private void LinkListPage_Loaded(object sender, RoutedEventArgs e)
{
List = new ExternalLinkList();
StreamResourceInfo xml = App.GetResourceStream(LinkListXML);
ParseOPML(xml.Stream, imagePathTo);
//MessageBox.Show("test " + List.List.Count);
LinkList.ItemsSource = List.List;
}
private static void ParseOPML(Stream stream, string pathto)
{
XDocument xDocument = XDocument.Load(stream);
// XML parsed using Linq
ExternalLink lin = null;
foreach(XElement outline in xDocument.Descendants("outline"))
{
string ImageName = pathto + outline.Attribute("imageName").Value;
lin = new ExternalLink(outline.Attribute("title").Value,
outline.Attribute("text").Value,
ImageName,
outline.Attribute("xmlUrl").Value);
List.List.Add(lin);
//MessageBox.Show(lin.Title + "\n" + lin.Text + "\n" + lin.ImageName + "\n" + lin.Link);
}
//MessageBox.Show("Title 0: " + List.List[0].Title + "\n ImageName 0: " + List.List[0].ImageName);
}
}
xaml コード
<phone:LongListSelector
x:Name="LinkList"
HorizontalAlignment="Left"
Margin="5,0,0,0"
VerticalAlignment="Top"
DataContext="local:ExternalLink"
SelectionChanged="LinkList_SelectionChanged"
ItemTemplate="{StaticResource HorizontalTileDataTemplate}"
>
</phone:LongListSelector>