簡體   English   中英

WPF數據綁定在Datagrid中的復選框上失敗

[英]WPF Databinding fails on Checkbox in Datagrid

我將Datagrid與Checkbox一起使用,並將其綁定到名為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");
        }
    }
}

但是當我單擊按鈕時什么也沒有發生。 為什么?

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