0

次のview.xamlがあり、コレクション(viewmodelからのSavedTracksCollection)をこのリストボックスにバインドすると、アイテムがUIに表示されます。

   <phone:PanoramaItem  Name="MusicTracks"  Header="Saved Tracks" >
            <Grid>
                <ListBox x:Name="list" ItemsSource="{Binding SavedTracksCollection}" SelectedItem="{Binding SelectedItemTrack,Mode=TwoWay}">                     

                    <ListBox.ItemTemplate>    
                            <DataTemplate>
                            <Button  Background="Red"  >                                
                                <StackPanel Orientation="Vertical">                                            
                                       <TextBlock Text="{Binding TrackTitle}"/>
                                        <TextBlock Text="{Binding TrackUri}"/>
                                 </StackPanel> 

                            </Button>
                           <DataTemplate>
                   </ListBox.ItemTemplate>  
           </Grid>
 </phone:PanoramaItem>

そして、「SelectedItemTrack」をバインドするselecteditemのビューモデルで次のプロパティが定義されています(このビューモデルはビューのデータコンテキストとして設定されています)。そして、SavedTracksCollectionをリストのアイテムソースにバインドしています。

  private SavedTracksModel _SelectedItemTrack;
    public SavedTracksModel SelectedItemTrack
    {
        get {
            return _SelectedItemTrack;
        }
        set
        {
            if (value!=null)              
            _SelectedItemTrack = value;
            //RaisePropertyChanged("SelectedItemTrack"); I dont think we need this.Let me know otherwise.


        }
    }

  private List<SavedTracksModel> _SavedTracksCollection = new List<SavedTracksModel>();
    public List<SavedTracksModel> SavedTracksCollection
    {
        get
        {
            return GetSavedTracks();
        }
        set
        {
            this._SavedTracksCollection = value;
            RaisePropertyChanged("SavedTracksCollection");
        }
    }

しかし、ユーザーがリストボックスからアイテムを選択したときに SelectedITem イベントをキャプチャする方法を決定することはできません。現在、SelectedITemTrack の set メソッドをトリガーしません。 「トラックを再生できる新しいページに移動したい。

問題を解決する方法はありますか?

4

1 に答える 1

1

私が考えることができる最初の解決策は、 ListBox で SelectionChanged イベントを使用しないのはなぜですか?

<ListBox x:Name="list" ItemsSource="{Binding SavedTracksCollection}"
    SelectedItem="{Binding SelectedItemTrack,Mode=TwoWay}"
    SelectionChanged="List_OnSelectionChanged"/>

// in code behind
private void List_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    // navigate here after validating the selected item  
    // or raise Command in your ViewModel programatically  
}
于 2013-11-07T22:14:54.320 に答える