简体   繁体   English

WPF数据绑定在Datagrid中的复选框上失败

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM