Wpf 如何从viewmodel在视图中触发动画?
所以现在我在控件上使用一个属性,它绑定到我的viewmodel上的一个bool属性,名为searcheditemfound(及其对searcheditemnotfound)。我不能只有一个属性,因为即使我提出OnPropertyChanged(“variableName”),它也不会激活触发器,除非有实际的值更改。这意味着在视图模型的代码中,我必须这样做: SearchedItemNotFound=false; SearchedItemNotFound=trueWpf 如何从viewmodel在视图中触发动画?,wpf,mvvm,Wpf,Mvvm,所以现在我在控件上使用一个属性,它绑定到我的viewmodel上的一个bool属性,名为searcheditemfound(及其对searcheditemnotfound)。我不能只有一个属性,因为即使我提出OnPropertyChanged(“variableName”),它也不会激活触发器,除非有实际的值更改。这意味着在视图模型的代码中,我必须这样做: SearchedItemNotFound=false; SearchedItemNotFound=true private bool _Se
private bool _SearchedItemNotFound;
public bool SearchedItemNotFound
{
get
{
return _SearchedItemNotFound;
}
set
{
if (value != _SearchedItemNotFound)
{
_SearchedItemNotFound = value;
OnPropertyChanged("SearchedItemNotFound");
}
}
}
当我真正想要的是只绑定到视图模型中的事件时。但是,eventtriggers只触发路由事件。我可以将路由事件放置在视图模型中吗?我想我必须从控件继承才能这样做
这里有一个帖子:
提及使用
<i:Interaction.Triggers>
<samples:DataEventTrigger EventName="YourEvent">
<im:ControlStoryboardAction Storyboard="{StaticResource Storyboard1}"
ControlStoryboardOption="Play"/>
</samples:DataEventTrigger>
</i:Interaction.Triggers>
它看起来很完美,只是它需要expression blend,而我在visual studio 2008中没有。我想知道我还有什么其他选项。我甚至不介意它是否是MVVM。我不是一个纯粹主义者,我只是想了解我的选项是什么。a
RoutedEvent
是一个UI元素,在视图模式中没有位置l、 就我个人而言,我看不出将bool
属性从true
更改为false
,然后再次更改为true
有什么问题……这样做有一个合理的理由。如果这真的让你感到困扰,那么就用一个方法将其隐藏起来,并调用它:
private StartSearchedItemNotFoundAnimation()
{
SearchedItemNotFound = false;
SearchedItemNotFound = true;
}
使用任何更复杂和/或更昂贵的方法来复制您已经拥有的功能几乎没有任何意义。我写了一个答案,其中提到了在ViewModel
中使用事件。