2011-12-27 129 views
1

我想爲ListView內的複選框進行雙向綁定。這是我的產品類別:CheckBox雙向綁定不起作用

public class Product 
{ 
    public bool IsSelected { get; set; } 
    public string Name { get; set; } 
} 

在ViewModel類我的產品觀察到的集合:

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"} 
          }; 
    } 
} 

最後,我有網格,ListView控件是結合我的產品列表:

<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 – 2011-12-27 08:49:15

回答

1

您將CheckBox綁定到IsSelected屬性。該物業實施爲auto implemented property。您將永遠不會在調試器中破壞setter或getter。我在代碼中看不到任何問題,它應該像編碼它一樣工作。

2

對於雙向綁定工作,你首先應該實現INotifyPropertyChanged事件在您的視圖模型和產品類別,以確保當有物業鑑於一些變化立即通知

還要確保您設置DataContext觀點正確

view.DataContext = yourViewModel; 

和Fischermaen提到你將無法調試這樣的財產,如果你想調試

public class Product 
    { 
     private bool isSelected; 

     public bool IsSelected 
     { 
      get { return isSelected; } 
      set { isSelected = value; } 
     } 
    } 
你應該做這樣的事情
相關問題