C# WPF列表框将SelectedItem值发送到viewmodel

C# WPF列表框将SelectedItem值发送到viewmodel,c#,.net,wpf,C#,.net,Wpf,在主窗口中,有一个列表框,其中填充了一些数据。这些数据是从viewmodel加载的,所以我没有任何代码隐藏 main window.xaml <ListBox Name="listBoxData" DataContext="{Binding Source={StaticResource MainWindowViewModelDataSource}}" ItemTemplate="{DynamicResource BookTemplate}"

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

main window.xaml

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

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

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

如下:(使用名为SelectedBook的属性)


SelectedBook
属性添加到
ViewModel
类中,最好是您的
Book
类型

然后在XAML中添加适当的
绑定

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

您的
SelectedBook
属性也必须调用适当的
PropertyChanged
通知,以便绑定保持UI和
ViewModel
同步。

只需将
SelectedItem
绑定到ViewModel中的某个属性(例如SelectedBook),无需使用ICommand即可

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

SelectedItem
绑定到ViewModel中的某些属性。
SelectedItem
默认情况下双向绑定。
<ListBox SelectedItem="{Binding SelectedBook, Mode=TwoWay}"/>
<ListBox Name="listBoxData" 
         ItemTemplate="{DynamicResource BookTemplate}"  
         ItemsSource="{Binding Books}"
         SelectedItem="{Binding SelectedBook}" />
int selectedBookId = SelectedBook.Id;