簡體   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