我怎样才能从视图模型中触发视图中的动画?

时间:2014-02-11 00:33:23

标签: wpf mvvm

所以现在我在我的控件上使用了一个属性,它绑定到我的viewmodel上的bool属性,名为searchingitemfound(带有对,searchitemnotfound)。我不能只有一个属性,因为即使我引发OnPropertyChanged(“variableName”),它也不会激活触发器,除非有实际的值更改。这意味着在视图模型的代码中,我必须真的这样做看起来丑陋:

SearchedItemNotFound = false; SearchedItemNotFound = true;

private bool _SearchedItemNotFound;
public bool SearchedItemNotFound
{
  get
  {
    return _SearchedItemNotFound;
  }
  set
  {
    if (value != _SearchedItemNotFound)
    {
      _SearchedItemNotFound = value;
      OnPropertyChanged("SearchedItemNotFound");
    }
  }
}

当我真正想要的只是绑定到视图模型中的事件时。但是,eventtriggers仅触发路由事件。我可以在路径模型中放置路由事件吗?我想我必须从控制中继承这一点。

此处有一条帖子:How can I Have a WPF EventTrigger on a View trigger when the underlying Viewmodel dictates it should?

提到

<i:Interaction.Triggers>
    <samples:DataEventTrigger EventName="YourEvent">
        <im:ControlStoryboardAction Storyboard="{StaticResource Storyboard1}" 
               ControlStoryboardOption="Play"/>
    </samples:DataEventTrigger>
</i:Interaction.Triggers>

看起来很完美,除了它需要表达混合,我在Visual Studio 2008中,它不可用。我想知道我还有其他选择。我甚至不介意它不是MVVM。我不是纯粹主义者,我只是想了解我的选择。

1 个答案:

答案 0 :(得分:2)

RoutedEvent是一个UI元素,在视图模型中没有位置。就个人而言,我无法真正看到将bool属性从true更改为false然后再返回true的问题...... 是< / em>这样做的正当理由。如果它真的困扰你,那么只需将它隐藏在一个方法中,然后调用它:

private StartSearchedItemNotFoundAnimation()
{
    SearchedItemNotFound = false; 
    SearchedItemNotFound = true;
}

使用任何更复杂和/或更昂贵的方法来复制已经所拥有的功能几乎没有任何意义。