#c# #xaml #windows-phone-7
#c# #xaml #windows-phone-7
Вопрос:
В настоящее время у меня есть класс, который получает и отправляет XML-канал с использованием Linq to XML в ListBox на моей странице XAML. Я взял это из руководства, и мне было интересно, смогу ли я отобразить это в pivot?
Моя идея состоит в том, чтобы загрузить канал и создать сводную страницу только в фоновом коде для каждого элемента (что-то вроде: для каждого элемента в моих данных создайте новую сводку с другим содержимым)
Возможно ли это? В настоящее время я получаю данные в ListBox, привязывая загрузку и используя «TextBlock Text=»{Идентификатор привязки}»/>» в XAML и загружая канал в фоновом коде следующим образом:
myFeed.LoadFeed(//name of the listbox that currently has to exist in XAML)
Вот мой код, который загружает XML-канал и отправляет в Listbox
public class FeedItem
{
public string Id { set; get; }
public string Text { set; get; }
}
public class Feed
{
ListBox myContext;
public void LoadFeed(ListBox context)
{
myContext = context;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri("http://myDataSource"));
request.BeginGetResponse(new AsyncCallback(ReadCallback), request);
}
private static readonly XNamespace m = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
private void ReadCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request =
(HttpWebRequest)asynchronousResult.AsyncState;
HttpWebResponse response =
(HttpWebResponse)request.EndGetResponse(asynchronousResult);
XDocument doc = XDocument.Load(response.GetResponseStream());
List<FeedItem> feedItems = (from question in doc.Descendants(m "properties")
select new FeedItem()
{
Id = question.Descendants().ToList()[0].Value,
Text = question.Descendants().ToList()[1].Value
}).ToList();
myContext.Dispatcher.BeginInvoke(() => { myContext.ItemsSource = feedItems; });
}
}
Что можно использовать для хранения данных, чтобы их можно было поместить в сводку?
Как мне поэлементно проанализировать ответ в новую сводку?
Ответ №1:
Да, вы можете. Вам необходимо предоставить datatemplate элементу управления сводкой. Обратите внимание на шаблон заголовка, который определен на уровне сводки, а не на уровне PivotItem.
<Grid x:Name="LayoutRoot" Background="Transparent">
<controls:Pivot ItemsSource="{Binding MyPivots}">
<controls:Pivot.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding MyTitle}"/>
</DataTemplate>
</controls:Pivot.HeaderTemplate>
<controls:Pivot.ItemTemplate>
<DataTemplate>
<controls:PivotItem>
<TextBlock Text="{Binding YourRssText}" />
</controls:PivotItem>
</DataTemplate>
</controls:Pivot.ItemTemplate>
</controls:Pivot>
И класс, лежащий в основе кода:
public partial class MainPage : PhoneApplicationPage{
public List<RssFeed> MyPivots { get; set; }
// Constructor
public MainPage()
{
MyPivots = new List<RssFeed>
{
new RssFeed{ MyTitle = "Title1", YourRssText = "Body1"},
new RssFeed{ MyTitle = "Title2", YourRssText = "Body2"},
new RssFeed{ MyTitle = "Title3", YourRssText = "Body3"},
};
InitializeComponent();
this.DataContext = this;
}
}
public class RssFeed
{
public string MyTitle { get; set; }
public string YourRssText { get; set; }
}