wpf - 我还能如何在 View 模型的 View 中触发动画?

标签 wpf mvvm

所以现在我在我的控件上使用一个属性,该属性绑定(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 模型中放置路由事件吗?我想我必须继承控制才能做到这一点。

这里有一个帖子: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,我什至不介意。我不是纯粹主义者,我只是想了解我的选择。

最佳答案

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/

相关文章:

c# - WPF:如何找到可用于 Canvas 的空间?

c# - 以异步方式以编程方式将 UIElement 添加到 View

wpf - 在 mvvm 中制作通用加载动画

c# - 为什么在 DataGridTextcolumn 中找不到 ObservableCollection 中实际类的属性,但父类属性是?

javascript - Knockout JS - 为什么所有示例都只包含 ViewModel/View 而没有 Model

c# - 单击搜索按钮触发验证

c# - 在网络浏览器中嵌入 Youtube 视频。对象不支持属性或方法

c# - 使用 `DataContractSerializer` 序列化包含 WPF 画笔的类

wpf - 在 DataTemplate 中 TemplatedParent 绑定(bind)的 Silverlight RelativeSource,这可能吗?

java - RxJavaSwing + 具有纵向横向 View 的 MVVM