보기에서 코드 숨김없이이 작업을 수행하는 방법 (목록 상자에서 선택한 선택 사항에 따라 세부 정보 페이지로 이동)을 아직 파악하지 못했습니다.
<ListBox x:Name="MainListBox" Margin="0,0,-12,0" ItemsSource="{Binding Items}"
SelectionChanged="MainListBox_SelectionChanged"
SelectedItem="{Binding Path=SelectedListItem, Mode=TwoWay}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,17" Width="432">
<TextBlock Text="{Binding LineOne}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
<TextBlock Text="{Binding LineTwo}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
첫째, 바인드 위의 당 양방향이 당신의 ViewModel의 속성에 바인딩 목록 상자의 selectedItem가 속성 (: 당신이보기에 조금 숨김 필요로 확인하는 경우 그러나, 나는 추천 무엇 상기에서 SelectedListItem
).
그런 다음이 페이지에 대한 코드 숨김에서 MainListBox_SelectionChanged에 대한 처리기를 구현 :
는
// Handle selection changed on ListBox
private void MainListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// If selected index is -1 (no selection) do nothing
if (MainListBox.SelectedIndex == -1)
return;
// Navigate to the new page
NavigationService.Navigate(new Uri("/DetailsPage.xaml", UriKind.Relative));
}
이것은 당신이 당신의 주요 관점에서 필요로하는 유일한 코드 숨김입니다.
public const string SelectedListItemPropertyName = "SelectedListItem";
private ItemViewModel _SelectedListItem;
/// <summary>
/// Sample ViewModel property; this property is used in the view to display its value using a Binding
/// </summary>
/// <returns></returns>
public ItemViewModel SelectedListItem
{
get
{
return _SelectedListItem;
}
set
{
if (value != _SelectedListItem)
{
_SelectedListItem = value;
RaisePropertyChanged(SelectedListItemPropertyName);
}
}
}
지금, 세부 사항 페이지 (문맥이 선택한 어떤 목록 항목 인)에 전달 된 컨텍스트를 얻는 데 트릭은 당신이 DataContext를 설정할 필요가
: 메인 뷰 모델에서
당신은 SelectedListItem 속성을 필요 세부 정보보기 :
public DetailsPage()
{
InitializeComponent();
if (DataContext == null)
DataContext = App.ViewModel.SelectedListItem;
}
희망이 있습니다.
출처
2010-09-09 06:06:47
tig
흠, 웹 생각, 나는 이것에 익숙하지 않다. 따라서 각 ListBoxItem에는 선택한 항목의 ID를 참조하는 쿼리 매개 변수가 포함 된 URI가 포함 된 HyperlinkButton (링크처럼 보이지 않는 템플릿이 분명히 있음)이 포함되어있는 것이 좋습니다. 다른 사람들은 Windows Phone 7에서이 작업을 수행하는 방법에 동의합니다. 그런데 실버 라이트를 처음 접했을 때, 그리드와 바운드 아이 컨트롤을 버튼 안에 넣었을 때 아무 것도 보지 못하는 것 같았습니다. 내가 뭘 놓치고 있니? –
거기에 두 가지 질문이 있고 두 번째 질문은 더 자세한 내용을 묻는 자체 질문입니다. HyperlinkButton까지, 그래, 그게 내가 시도 할거야. HyperlinkButton 컨트롤은 다른 것들처럼 보이도록 스타일이 매우 강력합니다. 예를 들어, 수평 StackPanel 안에 HyperlinkButton 컨트롤이있는 탭 스트립을 쉽게 만들 수 있습니다. –
가장 좋은 답으로 뽑혔지만, 마침내 버튼을 사용하고 있습니다. –