2013-03-21 3 views
-3

Я пытаюсь поднять событие PropertyChanged в свойстве ViewModel с использованием триггеров взаимодействия.Свойство PropertyChanged для свойства viewmodel

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" 

в вашем распоряжении, заранее спасибо ,

+0

Почему вы хотите это сделать? Вы эффективно добавляете логику в свое мнение. Почему вы не можете привязать команду кнопки к ICommand, а затем поднять свою собственность, измененную с вашего ViewModel? –

+0

, потому что логика вид связан, кроме того, почему не было вопроса, как был вопрос. –

+0

Нет необходимости в этом. –

ответ

2

Вы можете использовать обычную команду или Expression Blend's CallMethodAction, InvokeCommandAction или ChangePropertyAction.

Вот четыре способа сделать то, что вы хотите:

<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> 

Здесь я использую ViewModelBase MVVM Света:

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; } 
} 
+0

спасибо, все это хорошие варианты, iv'e исследовали их все до «Может быть, я должен добавить, что в моем посте я думал об ChangePropertyAction, но это может быть сделано только на свойства зависимостей, если я не ошибаюсь. –

+0

@eranotzap ChangePropertyAction works - , так что если установщик просто выполняет RaisePropertyChanged, это тоже работает. – Phil

Смежные вопросы