2011-04-09 1 views
0

안녕하세요 저는 ViewModel에서 이벤트가있는 Silverlight 페이지를 만들려고하고 있지만 페이지로드 이벤트에서이 작업을 수행하는 방법을 이해하지 못합니다. 적절한 명령을 찾을 수 없습니다.). 이것을 바인딩하고 싶습니다 : Loaded = "RadPane_Loaded"to Loaded = {Binding RadPane_Loaded}.Silverlight 모델,보기 - ViewModel 문제

보기 :

namespace SilverlightTest.Modules.Tree 
{ 
    public partial class OutlookBarView : RadPane 
    { 
     public OutlookBarView(OutlookBarViewModel model) 
     { 
      InitializeComponent(); 
      DataContext = model; 
     } 
    } 
} 

의 ViewModel : 당신이 프리즘에게 이러한 어셈블리를 사용하는 경우

namespace SilverlightTest.Modules.Tree 
{ 
    public class OutlookBarViewModel : DependencyObject 
    { 
     private IEventAggregator _eventAggregator; 
     private IMainPage _shell; 
     private IUnityContainer _container; 

     public OutlookBarViewModel(IEventAggregator eventAggregator, IMainPage shell, IUnityContainer container) 
     { 
      _container = container; 
      _eventAggregator = eventAggregator; 
      _shell = shell; 

     } 


     This is what I would normally do to bind something to a control. 

public ICommand ExampleCommand 
     { 
      get { return (ICommand)GetValue(ExampleCommandProperty); } 
      set { SetValue(ExampleProperty, value); } 
     } 

     /* Here I'd like to bind the page load event but I don't understand how...? */ 


    } 
} 

답변

2
  1. 이 (혼합 SDK에서 프로젝트 어셈블리 Microsoft.Expression.Interactions 및 System.Windows.Interativity에 추가 포함됨).
  2. 모델을 보려면 명령을 추가하십시오 (예 : f.i.
  3. 그리고 XAML에서 InitializeCommand

  4. 는 :로드 이벤트가 발생 시키면

    <RadPane> 
        <i:Interaction.EventTriggers> 
        <i:EventTrigger EventName="Loaded"> 
         <i:InvokeCommandAction Command={Binding InitializeCommand}/> 
        </i:EventTrigger> 
        </i:Interaction.EventTriggers> 
    </RadPane> 
    

그래서, 당신의 ViewModel의 명령 InitializeCommand가 불려갑니다.

+0

안녕하세요 블라디미르 감사합니다. 이것은 나에게 매우 유용한 정보입니다 : D이 작업을 수행하는 표준 Silverlight 방식입니까 아니면 대안이 있습니까? 이 기능은 표준 Silverlight 어셈블리에 없기 때문에이 기능이 궁금합니다. – BigChief

+0

예, MVVM 패턴을 사용하려는 경우 표준 방식입니다. 이 어셈블리는 Silverlight 5의 핵심에서 사용할 수 있지만 이제는 Blend SDK와 함께 제공됩니다 –

0

Caliburn 라이브러리를 사용하여 EventArgs를 ViewModel에 보내는 매우 간단한 방법이 있음을 알았습니다. (http://caliburnmicro.codeplex.com/)

xmlns : caliburn = "clr-namespace : Caliburn.Micro; assembly = Caliburn.Micro" xmlns : i = "http://schemas.microsoft.com/표현/2010/상호 작용 "

  <i:Interaction.Triggers> 
       <i:EventTrigger EventName="Loaded"> 
        <i:InvokeCommandAction Command="{Binding GridViewLoaded}"/> 
       </i:EventTrigger> 
       <i:EventTrigger EventName="SelectionChanged"> 
        <caliburn:ActionMessage MethodName="GridViewSelectionChangedCommandExecute"> 
         <caliburn:Parameter Value="$eventArgs"></caliburn:Parameter> 
        </caliburn:ActionMessage> 
       </i:EventTrigger> 
      </i:Interaction.Triggers> 

뷰 모델 :

public void GridViewSelectionChangedCommandExecute(SelectionChangeEventArgs e) 
{ } 

나는 ViewModel에 너무 많은 지금보기에 대해 알고 있는지하지만 궁금하네요.