2012-03-14 74 views
0

奇怪ListView.SelectedValue結合的問題,我有具有結合數據一個ListView,像這樣兩個額外的綁定:(至少我)

<ListView x:Name="listViewProducts" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" ItemsSource="{Binding Products}" IsSynchronizedWithCurrentItem="True" 
       SelectedItem="{Binding Path=Product, Mode=OneWayToSource}" SelectedIndex="{Binding Path=SelectedProductIndex, Mode=OneWayToSource}"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="ID" Width="100" DisplayMemberBinding="{Binding ID}" /> 
       <GridViewColumn Header="Name" Width="170" DisplayMemberBinding="{Binding Name}" /> 
       <GridViewColumn Header="Price" Width="100" DisplayMemberBinding="{Binding Price}" /> 
       <GridViewColumn Header="Reseller" Width="Auto" DisplayMemberBinding="{Binding Reseller}" /> 
      </GridView> 
     </ListView.View> 
    </ListView> 

喜歡我在視圖模型所需的產品性能。我也有4個文本框,例如像下面這樣:

< TextBox Grid.Row="0" Grid.Column="1" x:Name="txtName" ... 
     Text="{Binding Text, Path=Product.Name, Mode=TwoWay}" /> 

這裏是我想要實現: 我想更新,只有當用戶點擊一個按鈕等被定義一個listelement:

<Button Grid.Row="0" Grid.Column="2" x:Name="btnUpdate" .... 
     Content="Update product" 
     Command="{Binding Path=Update_Command}" 
     CommandParameter="{Binding ElementName=listViewProducts, Path=SelectedIndex}" /> 

這就是發生了什麼事情:每當我在列表視圖中選擇一個項目時,文本框會獲得正確的屬性。當我更改其中一個文本框並選擇另一個文本框時,該模型會立即更新。如果selecteditem與「OneWaytoSource」模式綁定,這可能如何?

回答

0

在我看來,它發生是因爲你將SelectedItem綁定到你的ViewModel中的Product屬性,當你在listView中選擇一個項目後,它將通過listView.SelectedItem傳遞對Product屬性的引用,所以你將有參考與Products集合中的相同對象。之後,您正在使用TwoWay綁定(TextBoxes)並更改產品的屬性,該屬性將通過引用自動將這些更改反映到listView。