2014-01-06 35 views
0

在MainWindow中,有一些列表框填充了一些數據。這些數據是從viewmodel加載的,所以我沒有任何代碼隱藏。WPF ListBox將SelectedItem值發送到視圖模型

MainWindow.xaml

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

我怎麼能知道內部列表框中選擇哪本書(使用ICommand),併發送它的(例如int Id)屬性viewmodel作進一步處理?

+2

綁定'SelectedItem'在視圖模型的一些屬性。 –

回答

2

只需綁定SelectedItem在你的ViewModel某些屬性(比如SelectedBook),沒有必要有的ICommand這一點。

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

您可以通過簡單地訪問視圖模型屬性來獲取ID爲本書:

int selectedBookId = SelectedBook.Id; 
0

羅希特夏爾是右

綁定列表框來那就是在視圖模型的屬性的選擇的項目:

這樣的:(使用稱爲SelectedBook屬性)

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

添加SelectedBook財產到您的ViewModel類,最好是您的Book類型。

然後在你的XAML,添加適當的Binding

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

如果它的行爲,你可以強制它是一個TwoWay綁定,就像這樣:

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

當務之急是,您的SelectedBook屬性也會調用正確的PropertyChanged通知,以便該綁定使UI和ViewModel保持同步。

+1

'SelectedItem'默認綁定爲雙向。 –