复选框双向绑定不起作用
本文关键字:不起作用 绑定 复选框 | 更新日期: 2023-09-27 18:18:54
我想为ListView中的复选框做双向绑定。这是我的Product类:
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"}
};
}
}
最后是Grid with ListView它绑定了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的行。你知道这段代码有什么问题吗?提前感谢!
对于双向绑定的工作,你应该首先在你的视图模型和产品类中实现INotifyPropertyChanged
事件,以确保当属性视图中的一些变化被立即通知
还要确保正确设置DataContext
view.DataContext = yourViewModel;
就像Fischermaen提到的你不能调试这种属性如果你想调试
你应该做这样的事情 public class Product
{
private bool isSelected;
public bool IsSelected
{
get { return isSelected; }
set { isSelected = value; }
}
}
您将CheckBox绑定到IsSelected属性。此属性实现为自动实现属性。在调试器中,你永远不会在setter或getter处中断。我看不出你的代码有什么问题,它应该像你写过的那样工作。
您应该实现一个绑定类型的INotifyPropertyChanged
接口,并且当IsSelected
属性设置时必须通知。
msdn:
文档和示例http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx