在MainWindow内部,列表框中填充了一些数据。这些数据是从viewmodel加载的,所以我没有任何代码隐藏。
MainWindow.xaml
<ListBox Name="listBoxData"
DataContext="{Binding Source={StaticResource MainWindowViewModelDataSource}}"
ItemTemplate="{DynamicResource BookTemplate}"
ItemsSource="{Binding Books}" />
如何知道在列表框中选择了哪本图书(使用ICommand
)并将其属性(例如int Id
)发送到viewmodel
以进行进一步处理?
答案 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}" />