【问题标题】:detect selecteditem details in ListBox from MVVM app in windows phone从 Windows 手机中的 MVVM 应用程序检测 ListBox 中的选定项详细信息
【发布时间】:2013-11-06 16:48:32
【问题描述】:

我有以下 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”。我将 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 方法。一旦我捕获带有所选项目详细信息的事件绑定“TrackUri”我想去一个可以播放曲目的新页面。

知道如何解决这个问题吗?

【问题讨论】:

  • 这听起来像是一个绑定问题。调试时是否检查了输出窗口中的绑定错误?
  • 我在编译或调试过程中没有看到任何错误。是否还需要为 SelectedITemTrack 调用 RaisePropertyChanged() 方法?。

标签: c# xaml windows-phone-7 mvvm windows-phone-8


【解决方案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  
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 2016-11-18
  • 2013-03-04
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
相关资源
最近更新 更多