質問

INotifyPropertyChangedを実装するクラス用のDataTemplateがあります。プロパティが変更され、異なる値の異なるストーリーボード(この場合はbool)が発生したときにストーリーボードをトリガーする方法はありますか?

そして、datatemplateが作成されるクラスの値に応じて、起動時にストーリーボードをトリガーする方法はありますか?

役に立ちましたか?

解決

はい、できます。

DataTriggerを追加し、それぞれのプロパティにバインドします。次に例を示します。

<DataTemplate.Triggers>
    <DataTrigger Binding="{Binding Path=MyProperty}" Value="True">
        <BeginStoryboard Storyboard="{StaticResource myStoryboard}"/>
    </DataTrigger>
</DataTemplate.Triggers>

テストする値を任意の値に設定できます。したがって、値がfalseに変更されたときに開始するようにストーリーボードを設定できます。必要な数のDataTrigger(または他のトリガー)を追加できます。

この例では、ダミーのプロパティとストーリーボードを参照していることに注意してください。

プロパティが変更されると、バインディングが更新され、データバインディングのためにトリガーが起動されます。

この手法は起動時にも機能するはずです。

他のヒント

上記のポスターと同様に、DataTriggerも使用し、それをViewModelのプロパティにバインドしました。紛らわしいのは、データトリガーを配置する場所です。ルートノード(つまり、ウィンドウ)に直接配置します。 Expression Blendを使用して作成し、タグの名前付けの詳細を処理しました。

また、プロジェクトに&quot; Microsoft.Expression.Interactions&quot;への参照を含めるようにしてください

XAML:(これはルートノードに直接入ります)

<Window
   xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
   xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 
   x:Name="window" >

    ...

    <i:Interaction.Triggers>
      <ei:DataTrigger Binding="{Binding FlashingBackground, Mode=OneWay}" Value="ON">
        <ei:ControlStoryboardAction Storyboard="{StaticResource MyAnimation}"     
                                                ControlStoryboardOption="Play"/>
      </ei:DataTrigger>
    </i:Interaction.Triggers>

    ...
</Window>

ViewModel:

 private void TurnOnFlashingBackround()
    {
        FlashingBackground = "ON";
    }

    private string _FlashingBackround = "OFF";

    public string FlashingBackground
    {
        get { return _FlashingBackround; }

        private set
        {
            if (FlashingBackground == value)
            {
                return;
            }

            _FlashingBackround = value;
            this.OnPropertyChanged("FlashingBackground");
        }
    }

    public new event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

最後に、Viewmodelは&quot; INotifyPropertyChanged&quot;から継承する必要があります

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top