#c# #xaml #windows-phone-7
#c# #xaml #Windows-phone-7
Вопрос:
просто нужно некоторое руководство. давайте сначала опубликуем коды:
XAML:
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Name="subjectBlock" Text="{Binding SubjectName}" FontSize="26" TextWrapping="Wrap" Foreground="{StaticResource PhoneAccentBrush}" Tap="subjectBlock_Tap" />
<TextBlock Text="{Binding LecturerName}" FontSize="24" IsHitTestVisible="False" />
<TextBlock Text=" "/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
Код на C #:
XDocument xmlCourse = XDocument.Load(xmlFile);
var xmlData = from subject in xmlCourse.Descendants("subject")
select new Subject
{
SubjectID = subject.Element("subjectID").Value,
SubjectName = subject.Element("subjectName").Value,
LecturerName = subject.Element("lecturerName").Value
};
subjectList.ItemsSource = xmlData;
xmlFile.Close();
…
private void subjectBlock_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
NavigationService.Navigate(new Uri("/eIICS;component/Pages/Coursework.xaml?type=2amp;subject=" subjectid, UriKind.Relative));
}
я пытаюсь передать SubjectID на другую страницу через событие tapped. я извлекаю данные через xml, у каждого отдельного субъекта есть идентификатор, и мне интересно, есть ли способ передать этот идентификатор напрямую / косвенно?
но, похоже, я пока не могу разобраться в этом.
некоторые рекомендации были бы действительно хороши. Спасибо. я сам только начинаю работать с WP7.
Приветствия.
Комментарии:
1. Проверьте это innovativesingapore.com/2010/09 /…
Ответ №1:
Исходя из того, что вы реализовали до сих пор, самый простой способ — извлечь контекст данных из объекта textblock и передать его на следующую страницу. Добавление к обработчику, который вы написали выше:
private void subjectBlock_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
var textblock = sender as TextBlock;
if(null != textblock) {
var subject = textblock.DataContext as Subject;
if(null != subject) {
string subjectid = subject.SubjectID;
NavigationService.Navigate(new Uri("/eIICS;component/Pages/Coursework.xaml?type=2amp;subject=" subjectid, UriKind.Relative));
}
}
Однако я также хочу отметить, что это может быть не лучшим решением. Использование обработчиков событий для обработки всех взаимодействий с пользователем может затруднить сверхурочное обслуживание вашего кода, а писать тестовые примеры для обработчиков событий действительно сложно. Вы можете рассмотреть возможность использования MVVM-фреймворков, таких как MVVMLight, для улучшения тестируемости вашего кода. Платформа поставляется с командной системой, которая отделяет представление (XAML) от кода (.cs). Это избавит вас от многих головных болей в будущем =)
Ссылка на проект MVVMLight: http://www.galasoft.ch/mvvm /
Сообщение о командной структуре: http://blog.galasoft.ch/archive/2009/09/26/using-relaycommands-in-silverlight-and-wpf.aspx
Комментарии:
1. по какой-то причине отправитель. DataContext не читается. я думаю, что это проблема с моим XAML, правильно?
2. Извините, что это проблема с кодом. Обновлен код, теперь он должен работать
Ответ №2:
РЕШЕНО. Спасибо Лео Це за то, что дал мне указания. Я искал больше, и я нашел это — http://mobile.tutsplus.com/tutorials/windows/windows-phone-7-silverlight-tutorial /
Поскольку я использовал ListBox, и я просто хотел передать SubjectID. Использование ListBox.SelectedItem в качестве объекта работало хорошо. Хотя я не уверен, что это хакерство, но это кажется правильным.
private void subjectBlock_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
var subject = subjectList.SelectedItem as Subject;
if (null != subject)
{
string subjectid = subject.SubjectID;
NavigationService.Navigate(new Uri("/eIICS;component/Pages/Coursework.xaml?type=2amp;subjectid=" subjectid, UriKind.Relative));
}
}
Все еще изучаю WP7. До сих пор это был взрыв!
Комментарии:
1. Поздравляю с решением. Обязательно отметьте свой ответ как «принятый», чтобы другие могли извлечь уроки из вашего успеха. Приветствия ~