在wpf datagrid中闪烁行不起作用

时间:2016-02-19 11:24:32

标签: c# wpf animation binding datagrid

我在WPF中遇到动画。我需要在数据网格中设置一行(闪烁)动画,当在该行中选中所有复选框选项时(总共3个)。

to

在视图模型中我有。

sender

为什么这不起作用?我尝试了很多我在互联网上找到的解决方案,但没有什么不起作用。发布的示例与msdn网站上的代码非常相似,所以我真的不知道这里有什么问题。

1 个答案:

答案 0 :(得分:0)

解决此问题需要解决几个问题。

get 
{
    int count = 0;
    foreach(Skill skill in ((EmployeeViewModel)SelectedRow).Skills)
    {
        if(skill.IsChecked)
        {
            count++;
        }
    }
    return count;
}

在获取属性时,您应该只返回值,并且不应更改任何值。它违反了 - [命令查询分离原则] [1]

而只是返回私有变量_count

private int _count
public int NumberOfSkills
{
 get
 {
  return _count;
 }
 set
 {
  _count = value;
  NotifyPropertyChanged("NumberOfSkills")
 }
}

现在问题在于你应该在哪里设置NumberOfSkills的逻辑?所以你应该留在用户/演员改变它的地方。

假设您设置IsChecked属性是由Skills类的用户从UI设置的。您可以订阅IsChecked PropertyChanged()并分隔更新NumberOfSkills的逻辑。

skill.PropertyChanged += SkillsPropertyChanged

SkillsPropertyChanged(Object sender, PropertyChangedEventArgs e)
{
  if(e.PropertyName ="IsChecked")
  { 
    //Logic to update the NumberOfSkills
    if(skill.IsChecked)
    {
        NumberOfSkills++;
    }
    else
    {
        NumberOfSkills--;
    }
  }
}

使用现有方法执行此操作的快捷方式很简单。设置NotifyPropertyChanged("NumberOfSkills")时,只需致电IsCheckedProperty即可。虽然这可能不是直截了当的,但希望你明白这一点。

private bool _isChecked;
public bool IsChecked
{
 get {return _isChecked;}
 set 
 {
   _isChecked = value;
   NotifyPropertyChanged("IsChecked");
   NotifyPropertyChanged("NumberOfSkills");
 }
}
相关问题