Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在DataGridCheckBoxColumn.Header WPF中检查设置值_C#_Wpf - Fatal编程技术网

C# 如何在DataGridCheckBoxColumn.Header WPF中检查设置值

C# 如何在DataGridCheckBoxColumn.Header WPF中检查设置值,c#,wpf,C#,Wpf,我已经找了两天了,我尝试了不同的事情,但没有成功 441/5000 我有一个带有复选框标题的复选框列的datagrid 当我选中标题复选框时,我选中了所有复选框,反之亦然 我的问题是: 如果我选中标题复选框,我的所有列复选框都会被选中,但如果我取消选中其中一个,我的标题复选框不会熄灭 你能帮我吗?如何动态更改标题复选框的isChecked属性 候选者 public class Candidate : INotifyPropertyChanged { public int Candida

我已经找了两天了,我尝试了不同的事情,但没有成功

441/5000 我有一个带有复选框标题的复选框列的datagrid

当我选中标题复选框时,我选中了所有复选框,反之亦然

我的问题是:

如果我选中标题复选框,我的所有列复选框都会被选中,但如果我取消选中其中一个,我的标题复选框不会熄灭

你能帮我吗?如何动态更改标题复选框的isChecked属性

候选者

 public class Candidate : INotifyPropertyChanged
{
    public int CandidateID { get; set; }
    public int RegisterNo { get; set; }
    public string CandidateName { get; set; }
    private bool _IsSelected = false;
    private bool _IsChecked = false;
    public bool IsSelected { get { return _IsSelected; } set { _IsSelected = value; OnChanged("IsSelected"); } }


    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;
    private void OnChanged(string prop)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(prop));
    }

    #endregion
}
MainWindows.xaml.cs

    public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        List<Candidate> tmp = new List<Candidate>();
        tmp.Add(new Candidate()
        {
            CandidateID = 1,
            CandidateName = "One",
            RegisterNo = 1
        });
        tmp.Add(new Candidate()
        {
            CandidateID = 2,
            CandidateName = "Two",
            RegisterNo = 2
        });
        tmp.Add(new Candidate()
        {
            CandidateID = 3,
            CandidateName = "Three",
            RegisterNo = 3
        });
        dgCandidate.ItemsSource = tmp;


    }
    private void chkSelectAll_Checked(object sender, RoutedEventArgs e)
    {
        foreach (Candidate c in dgCandidate.ItemsSource)
        {
            c.IsSelected = true;
        }
    }

    private void chkSelectAll_Unchecked(object sender, RoutedEventArgs e)
    {
        foreach (Candidate c in dgCandidate.ItemsSource)
        {
            c.IsSelected = false;
        }
    }
}
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
List tmp=新列表();
tmp.Add(新候选人()
{
CandidateID=1,
CandidateName=“一”,
寄存器no=1
});
tmp.Add(新候选人()
{
CandidateID=2,
CandidateName=“两个”,
寄存器no=2
});
tmp.Add(新候选人()
{
CandidateID=3,
CandidateName=“三”,
寄存器no=3
});
dgCandidate.ItemsSource=tmp;
}
私有无效chkSelectAll_已选中(对象发送方,路由目标e)
{
foreach(dgCandidate.ItemsSource中的候选c)
{
c、 IsSelected=true;
}
}
私有无效chkSelectAll\u未选中(对象发送方,路由目标)
{
foreach(dgCandidate.ItemsSource中的候选c)
{
c、 IsSelected=false;
}
}
}
XAML


每当选中单个项目时,您需要确定是选中还是取消选中
chkSelectAll
。您可以通过处理所有
候选对象的
属性changed
来实现这一点:

public MainWindow()
{
    InitializeComponent();
    List<Candidate> tmp = new List<Candidate>();
    tmp.Add(new Candidate()
    {
        CandidateID = 1,
        CandidateName = "One",
        RegisterNo = 1
    });
    tmp.Add(new Candidate()
    {
        CandidateID = 2,
        CandidateName = "Two",
        RegisterNo = 2
    });
    tmp.Add(new Candidate()
    {
        CandidateID = 3,
        CandidateName = "Three",
        RegisterNo = 3
    });
    dgCandidate.ItemsSource = tmp;

    foreach (Candidate candidate in tmp)
    {
        candidate.PropertyChanged += Candidate_PropertyChanged;
    }
}

private void Candidate_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    _handle = false;
    chkSelectAll.IsChecked = (dgCandidate.ItemsSource as IEnumerable<Candidate>)?
        .All(x => x.IsSelected) == true;
    _handle = true;
}

private bool _handle;
private void chkSelectAll_Checked(object sender, RoutedEventArgs e)
{
    if (_handle && dgCandidate.IsLoaded)
    {
        foreach (Candidate c in dgCandidate.ItemsSource)
        {
            c.IsSelected = true;
        }
    }
}

private void chkSelectAll_Unchecked(object sender, RoutedEventArgs e)
{
    if (_handle)
    {
        foreach (Candidate c in dgCandidate.ItemsSource)
        {
            c.IsSelected = false;
        }
    }
}

每当选中单个项目时,您需要确定是选中还是取消选中
chkSelectAll
。您可以通过处理所有
候选对象的
属性changed
来实现这一点:

public MainWindow()
{
    InitializeComponent();
    List<Candidate> tmp = new List<Candidate>();
    tmp.Add(new Candidate()
    {
        CandidateID = 1,
        CandidateName = "One",
        RegisterNo = 1
    });
    tmp.Add(new Candidate()
    {
        CandidateID = 2,
        CandidateName = "Two",
        RegisterNo = 2
    });
    tmp.Add(new Candidate()
    {
        CandidateID = 3,
        CandidateName = "Three",
        RegisterNo = 3
    });
    dgCandidate.ItemsSource = tmp;

    foreach (Candidate candidate in tmp)
    {
        candidate.PropertyChanged += Candidate_PropertyChanged;
    }
}

private void Candidate_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    _handle = false;
    chkSelectAll.IsChecked = (dgCandidate.ItemsSource as IEnumerable<Candidate>)?
        .All(x => x.IsSelected) == true;
    _handle = true;
}

private bool _handle;
private void chkSelectAll_Checked(object sender, RoutedEventArgs e)
{
    if (_handle && dgCandidate.IsLoaded)
    {
        foreach (Candidate c in dgCandidate.ItemsSource)
        {
            c.IsSelected = true;
        }
    }
}

private void chkSelectAll_Unchecked(object sender, RoutedEventArgs e)
{
    if (_handle)
    {
        foreach (Candidate c in dgCandidate.ItemsSource)
        {
            c.IsSelected = false;
        }
    }
}

这回答了你的问题吗@PavelAnikhouski代码在我的帖子中:MainWindows.xaml。cs@petethepagan-沙鼠我读了另一篇类似的文章,但我不知道如何创建视图模型?候选视图模型是在MainWindow.xaml.cs中创建的-这就是你的意思吗?还是一个不同的视图模型?这是否回答了您的问题@PavelAnikhouski代码在我的帖子中:MainWindows.xaml。cs@petethepagan-沙鼠我读了另一篇类似的文章,但我不知道如何创建视图模型?候选视图模型是在MainWindow.xaml.cs中创建的-这就是你的意思吗?还是不同的视图模型?