2011-06-23 23 views
0

私はWPFとMvvmを使用しています。リストビューのItemSourceはICollectionViewにバインドされています。選択したアイテムの変更イベントを処理するにはどうすればよいですか?ListViewのItemsソースバインディングがソースに変更されていません

元々、私はDataGridのItemSourceを同じICollectionViewにバインドし、コレクションのCurrentChangedイベントを設定しました。すべて正常に動作しますが、ListViewの場合はそうではありません。

答えて

4

のプロパティにListViewSelectedItemをバインドします。明確にするために、ここに例があります。

ここに私の見解は

<Grid x:Name="LayoutRoot" Background="White"> 
     <ListView ItemsSource="{Binding Contacts}" SelectedItem="{Binding SelectedContact, Mode=TwoWay}"> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Name}" /> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 
    </Grid> 

そして、ここではあなたがSelectedContactのセッターに足を踏み入れるますリストボックスで選択を変更してみてください、私のViewModel

public class MainViewModel: ViewModelBase 
{ 
    ObservableCollection<ContactViewModel> contacts; 
    ContactViewModel selectedContact; 

    public ContactViewModel SelectedContact 
    { 
     get { return selectedContact; } 
     set { 
      selectedContact = value; 
      base.OnPropertyChanged("SelectedContact"); 
     } 
    } 

    public ObservableCollection<ContactViewModel> Contacts 
    { 
     get { return contacts; } 
     set { 
      contacts = value; 
      base.OnPropertyChanged("Contacts"); 
     } 
    } 
} 

毎回だのです。

set 
{ 
    contacts = value; 
    base.OnPropertyChanged("Contacts"); 
} 

これにより、選択した連絡先が変更されたことがわかります。

プロパティSelectedContactを使用すると、コレクション内のどのアイテムが選択されているかが分かります。

複数の選択を実装する場合は、ViewModelのCollectionプロパティをListViewのSelectedItems属性にバインドすることもできます。

3

ただ、トーマスが述べたように、あなたが、しなければならないのはのviewmodel内のプロパティにリストボックスのSelectedItemの属性をバインドすることで、あなたのViewModel

関連する問題