WPF ListBox将SelectedItem值发送到viewmodel

时间:2014-01-06 19:30:15

标签: c# .net wpf

在MainWindow内部,列表框中填充了一些数据。这些数据是从viewmodel加载的,所以我没有任何代码隐藏。

MainWindow.xaml

<ListBox Name="listBoxData" 
         DataContext="{Binding Source={StaticResource MainWindowViewModelDataSource}}" 
         ItemTemplate="{DynamicResource BookTemplate}"                              
         ItemsSource="{Binding Books}" />

如何知道在列表框中选择了哪本图书(使用ICommand)并将其属性(例如int Id)发送到viewmodel以进行进一步处理?

3 个答案:

答案 0 :(得分:2)

只需将SelectedItem绑定到ViewModel中的某个属性(例如 SelectedBook ),就不需要 ICommand

<ListBox Name="listBoxData" 
         ItemTemplate="{DynamicResource BookTemplate}"  
         ItemsSource="{Binding Books}"
         SelectedItem="{Binding SelectedBook}" />

您只需访问ViewModel属性即可获得该书的ID:

int selectedBookId = SelectedBook.Id;

答案 1 :(得分:1)

SelectedBook课程中添加ViewModel媒体资源,最好是Book类。

然后在您的XAML中添加适当的Binding

<ListBox SelectedItem="{Binding SelectedBook}"/>

如果它起作用,你可以强迫它成为TwoWay绑定,如下所示:

<ListBox SelectedItem="{Binding SelectedBook, Mode=TwoWay}"/>

您的SelectedBook属性必须调用正确的PropertyChanged通知,以便绑定可以保持用户界面和ViewModel同步。

答案 2 :(得分:0)

Rohit是对的

将列表框的选定项绑定到viewmodel中的属性:

像这样:(使用名为SelectedBook的属性)

 <ListBox Name="listBoxData" 
     DataContext="{Binding Source={StaticResource MainWindowViewModelDataSource}}" 
     SelectedItem="{Binding Path=SelectedBook, Mode=TwoWay}"
     ItemTemplate="{DynamicResource BookTemplate}"                              
     ItemsSource="{Binding Books}" />