我在WPF中遇到动画。我需要在数据网格中设置一行(闪烁)动画,当在该行中选中所有复选框选项时(总共3个)。
to
在视图模型中我有。
sender
为什么这不起作用?我尝试了很多我在互联网上找到的解决方案,但没有什么不起作用。发布的示例与msdn网站上的代码非常相似,所以我真的不知道这里有什么问题。
答案 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");
}
}