Подобно плакату выше, я также использовал DataTrigger, а затем привязал его к свойству в моей ViewModel. Единственное, что меня смутило, это то, где разместить триггер данных. Я поместил его прямо в корневой узел (т.е. в окно). Я создал его с помощью Expression Blend, который позаботился о деталях именования тегов для меня.
Также не забудьте включить в свой проект ссылку на "Microsoft.Expression.Interactions".
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));
}
}
Наконец, модель представления должна наследоваться от «INotifyPropertyChanged».
person
CowboyBebop
schedule
12.05.2011