[英]WPF Databinding fails on Checkbox in Datagrid
I use a Datagrid with a Checkbox and I want to bind it to a class named Part
: 我将Datagrid与Checkbox一起使用,并将其绑定到名为
Part
的类:
public class Part
{
public bool DoImport { get; set; }
}
My Window WPF is: 我的窗口WPF是:
<Window x:Class="CompareWindow">
<Grid>
<DataGrid x:Name="CompareGrid" ItemsSource="{Binding}" >
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="Import" Width="100" IsReadOnly="False" Binding="{Binding Path=DoImport, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataGrid.Columns>
</DataGrid>
<Button x:Name="SelectAllBtn" Content="Select All" Click="SelectAllButton_Click"/>
</Grid>
</Window>
In there I use a Button named Select All
that should check all Checkboxes at once if clicked: 在其中,我使用一个名为“全
Select All
的按钮,如果单击该按钮,应立即检查所有复选框:
public partial class CompareWindow : Window, INotifyPropertyChanged {
public CompareWindow(Part somePart) {
_changedParts = new ObservableCollection<Part>();
_changedParts.Add(somePart);
CompareGrid.DataContext = _changedParts;
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string name) {
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
private void SelectAllButton_Click(object sender, RoutedEventArgs e) {
ChangedParts.ToList().ForEach(x => x.DoImport = true);
}
private ObservableCollection<Part> _changedParts;
public ObservableCollection<Part> ChangedParts {
get { return _changedParts; }
set {
_changedParts = new ObservableCollection<Part>();
foreach (var part in value) {
_changedParts.Add(part);
}
OnPropertyChanged("ChangedParts");
}
}
}
But nothing happens when I click the button. 但是当我单击按钮时什么也没有发生。 Why?
为什么?
You need to implement INotifyPropertyChanged
in the class that contains the DoImport
property. 您需要在包含
DoImport
属性的类中实现INotifyPropertyChanged
。
private bool doImport;
public bool DoImport
{
get { return doImport; }
set
{
doImport = value;
this.OnPropertyChanged("DoImport");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.