2011-12-27 16 views
1

ListView内でチェックボックスの双方向バインドを行いたいと思います。これは私のProductクラスである:CheckBox双方向バインディングが機能しません

のViewModelクラスで
public class Product 
{ 
    public bool IsSelected { get; set; } 
    public string Name { get; set; } 
} 

私は製品の監視可能なコレクションがあります。

private ObservableCollection<Product> _productList; 
    public ObservableCollection<Product> ProductList 
    { 
     get 
     { 
      return _productList; 
     } 
     set 
     { 
      _productList = value; 
     } 
    } 

    public MainViewModel() 
    { 
     ProductList = new ObservableCollection<Product> 
          { 
           new Product {IsSelected = false, Name = "Not selected"}, 
           new Product {IsSelected = true, Name = "Selected"}, 
           new Product {IsSelected = true, Name = "Selected"} 
          }; 
    } 
} 

をそして最後に、私は私のProductListを結合リストビューでグリッドを持っています。

<Grid> 
    <ListView Height="120" HorizontalAlignment="Left" 
        VerticalAlignment="Top" 
        SelectionMode="Multiple" 
        ItemsSource="{Binding ProductList}" > 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Width="40"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <CheckBox IsChecked="{Binding Path=IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <GridViewColumn Width="120" Header="Product Name" DisplayMemberBinding="{Binding Path=Name}" /> 
      </GridView> 
     </ListView.View> 
    </ListView> 
</Grid> 

私はチェックボックスをオン/オフにすると、決してsetterの行に届かないこのアプリケーションをデバッグします。 このコードで何が間違っていますか? ありがとうございます!

+0

http://stackoverflow.com/a/504936/440030 –

答えて

1

CheckBoxをIsSelectedプロパティにバインドしました。このプロパティはauto implemented propertyとして実装されています。デバッガでセッターやゲッタを壊すことはありません。あなたのコードに問題は見えません。コード化したように動作します。プロパティビューで、いくつかの変更があったが

瞬時に通知されたときに、2つの方法については

2

はまた、あなたがDataContextを設定していることを確認してくださいあなたが最初にすべてのことを確認するために、ビューモデルと製品クラスでINotifyPropertyChangedイベントを実装する必要があります動作するように結合しますビューの正確

view.DataContext = yourViewModel; 

とFischermaenはあなたが

public class Product 
    { 
     private bool isSelected; 

     public bool IsSelected 
     { 
      get { return isSelected; } 
      set { isSelected = value; } 
     } 
    } 
をデバッグしたい場合は、このような何かを行う必要があるプロパティのこの種をデバッグすることはできません述べたように
関連する問題