所以现在我在我的控件上使用一个属性,该属性绑定(bind)到我的 View 模型上名为 searcheditemfound(及其对,searcheditemnotfound)的 bool 属性。我不能只有一个属性,因为即使我引发 OnPropertyChanged("variableName),它也不会激活触发器,除非实际值发生变化。这意味着在 View 模型的代码中,我必须真正做到这一点丑陋的样子:
SearchedItemNotFound = false; SearchedItemNotFound = true;
private bool _SearchedItemNotFound;
public bool SearchedItemNotFound
{
get
{
return _SearchedItemNotFound;
}
set
{
if (value != _SearchedItemNotFound)
{
_SearchedItemNotFound = value;
OnPropertyChanged("SearchedItemNotFound");
}
}
}
当我真正想要的只是绑定(bind)到 View 模型中的事件时。但是,事件触发器仅触发路由事件。我可以在 View 模型中放置路由事件吗?我想我必须继承控制才能做到这一点。
提到使用
<i:Interaction.Triggers>
<samples:DataEventTrigger EventName="YourEvent">
<im:ControlStoryboardAction Storyboard="{StaticResource Storyboard1}"
ControlStoryboardOption="Play"/>
</samples:DataEventTrigger>
</i:Interaction.Triggers>
这看起来很完美,只是它需要表达混合,而且我在 visual studio 2008 中没有它。我想知道我还有什么其他选择。如果不是 MVVM,我什至不介意。我不是纯粹主义者,我只是想了解我的选择。
最佳答案
A RoutedEvent
是一个 UI 元素,在 View 模型中没有位置。就个人而言,我真的看不出改变你的 bool
有什么问题。来自 true
的属性(property)至 false
然后回到true
再次......是这样做的正当理由。如果它真的困扰你,那么只需将它隐藏在一个方法中并改为调用它:
private StartSearchedItemNotFoundAnimation()
{
SearchedItemNotFound = false;
SearchedItemNotFound = true;
}
使用任何更复杂和/或昂贵的方法来复制您已经拥有的功能几乎没有任何意义。
关于wpf - 我还能如何在 View 模型的 View 中触发动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21690782/