【问题标题】:How to run trigger in View from ViewModel appropriately?如何从 ViewModel 适当地在 View 中运行触发器?
【发布时间】:2013-12-05 21:38:51
【问题描述】:

在 ViewModel 中引发事件后,我想在我的视图中执行操作。我找到了一个解决方案here,但它似乎相当复杂。没有内置机制吗?我还阅读了有关在 ViewModel 中引发 RoutedEvent 的信息,但这种方法需要 ViewModel 知道接收器的类型 - 是否符合 MVVM 模式?

编辑:

更具体地说,我需要从 ViewModel 运行下面提到的动画:

<Page.Resources>
    <Storyboard x:Key="MyStoryboard">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="MyTextBlock">
            <EasingDoubleKeyFrame KeyTime="0:0:1" Value="1"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
</Page.Resources>

一开始我想在page.triggers中定义eventTrigger,但它需要routedEvent。你有什么建议吗?

【问题讨论】:

    标签: c# wpf mvvm eventtrigger routedevent


    【解决方案1】:

    MVVM 允许在 ViewModel 中引发事件并在 View 中捕获它们。

    在这里看看:

    http://msdn.microsoft.com/en-us/library/gg405484%28v=pandp.40%29.aspx

    在 ViewModel 中引发并被 View 捕获的事件的最佳示例是唯一的 INotifyPropertyChanged 事件。

    让我们更深入地了解该机制。

    视图询问数据是否实现了 INotifyPropertyChanged 接口。如果是,则视图订阅 PropertyChanged 事件。

    现在你需要做同样的事情。让视图询问您希望询问的特定事件,并在找到时简单地订阅它。就是这样:)

    顺便说一句,如果您希望我们提供代码帮助,请先提供代码。

    【讨论】:

    • 我刚刚在我的问题中添加了一些代码以使其更清晰。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多