【问题标题】:WPF Databinding fails on Checkbox in DatagridWPF 数据绑定在 Datagrid 中的复选框上失败
【发布时间】:2014-02-01 21:10:55
【问题描述】:

我使用带有 Checkbox 的 Datagrid,我想将它绑定到名为 Part 的类:

public class Part 
{
    public bool DoImport { get; set; }
}

我的窗口 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>

在那里,我使用了一个名为 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");
        }
    }
}

但是当我点击按钮时没有任何反应。为什么?

【问题讨论】:

    标签: c# wpf data-binding properties datagrid


    【解决方案1】:

    您需要在包含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));
    }
    

    【讨论】:

    • 圣洁INotifyPropertyChanged :)
    猜你喜欢
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多