繁体   English   中英

WPF ListBox将SelectedItem值发送到viewmodel

[英]WPF ListBox send SelectedItem value to the viewmodel

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

MainWindow.xaml

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

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

只需将SelectedItem绑定到ViewModel中的某个属性(比如SelectedBook ),就不需要为此提供ICommand

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

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

int selectedBookId = SelectedBook.Id;

SelectedBook属性添加到ViewModel类,最好是Book类型。

然后在你的XAML中,添加适当的Binding

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

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

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

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

罗希特是对的

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM