-3

我正在尝试使用交互触发器在我的 ViewModel 中的 Property 上引发 PropertyChanged 事件。

CS :

public string MyContentProperty
{
    get { return "I Was Raised From an outside Source !";}
}

XAML:

<Button Content="{Binding MyContentProperty}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Button.Click">
               < .... what needs to be done ?>         
        </i:EventTrigger>                        
     </i:Interaction.Triggers>
</Button>

当然,如果对这个问题有任何疑问,您可以参考

 xmlns:ei="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions" 
 xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 

随时为您服务,在此先感谢您。

4

1 回答 1

2

您可以使用普通命令或 Expression Blend 的CallMethodActionInvokeCommandActionChangePropertyAction

这里有四种方法可以做你想做的事:

<Button Content="Button" Height="23" Width="100" Command="{Binding RaiseItCmd}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <i:InvokeCommandAction Command="{Binding RaiseItCmd}"/>
            <ei:CallMethodAction MethodName="RaiseIt" TargetObject="{Binding}"/>
            <ei:ChangePropertyAction Value="" 
                     PropertyName="MyContentProperty" TargetObject="{Binding}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

这里我使用 MVVM Light 的 ViewModelBase:

using System.Windows.Input;
using GalaSoft.MvvmLight;
using Microsoft.Expression.Interactivity.Core;

public class ViewModel : ViewModelBase
{
    public ViewModel()
    {
        RaiseItCmd = new ActionCommand(this.RaiseIt);
    }

    public string MyContentProperty
    {
        get
        {
            return "property";
        }
        set
        {
            this.RaiseIt(); 
        }
    }

    public void RaiseIt()
    {
        RaisePropertyChanged("MyContentProperty");
    }

    public ICommand RaiseItCmd { get; private set; }
}
于 2013-03-21T22:29:16.870 回答