2010-05-31 2 views
2

MVVM Light Toolkit을 사용하고 있습니다. 빈 메시지를 보내려면 Messenger 또는 Notification 클래스의 Ctor를 찾을 수 없습니다.MVVM 툴킷 표시 등으로 빈 메시지 또는 알림 보내기

ViewModel1 :

private int _selectedWeeklyRotation; 
    public int SelectedWeeklyRotation 
    { 
     get { return _selectedWeeklyRotation; } 
     set 
     { 
      if(_selectedWeeklyRotation == value) 
       return; 

      _selectedWeeklyRotation = value; 
      this.OnPropertyChanged("SelectedWeeklyRotation"); 
      if(value > 1) 
       Messenger.Default.Send();      
     } 
    } 

ViewModel2 :

Ctor: 

Messenger.Default.Register(this, CreateAnotherTimeTable); 

private void CreateAnotherTimeTable() 
{ 

} 

난 그냥 어떤이의 모든 데이터의 전송, 다른 뷰 모델에 알림을 보낼 필요가 없습니다.

MVVM Light Toolkit 라이브러리에서 가능합니까?

+0

로랑은 누구입니까? –

+0

erhm ... 여기에 그의 서비스를 제공하는 툴킷의 저자? – msfanboy

답변

0

나는 그것이 가능하고 솔직히 나는 그런 종류의 메시지를 갖는 점을 보지 못한다고 생각합니다. "SelectedWeeklyRotation"이라는 문자열을 보낼 수도 있습니다. 응용 프로그램의 브로드 캐스트 메시지 및 수신자 수를 늘릴 때 의미가있는 빈 메시지가있는 것이 이상하게 보입니다.

MVVM Light 버전에서는 빈 메시지를 보낼 수도 없습니다.

// Update bindings and broadcast change using GalaSoft.MvvmLight.Messenging 
RaisePropertyChanged(MyPropertyPropertyName, oldValue, value, true); 

이 당신을 위해 관심의 대상이 될 수 있습니다 :

그러나 나는 인 ViewModelBase의 방법을 참조했다.

+0

@karinp 재미있어 보이고, 그 방법에 대한 샘플을 찾았습니까? 해당 이벤트의 사용법에 대한 정보/샘플 프로젝트를 찾을 수 없습니다. – msfanboy

1

실제로이 작업을 수행 할 방법이 없으며 어쨌든 메신저 클래스의 요점을 무시합니다. 나는 당신이 틀린 포스트를하고있는 것을 쓰고 싶지 않았지만, 나는 갇혀 있다고 느낀다. 메신저 클래스가 작동하는 방식은 두 개념 모두 동일한 개념, 즉 관찰자 모델을 구독하는 두 당사자가 있다는 것입니다. 비슷한 개념이나 메시지가 없다면 실제로 두 객체를 묶는 방법이 없습니다. 단순 문자열 또는 사용자 지정 메시지가 구독 및 게시 클래스의 모임 지점 역할을하는지 여부를 나타내는 일반 메시지입니다. 뷰 모델의 출판 뷰 모델의 유형을 알고있는 경우

Messenger.Default.Send<Type>(typeof(ViewModelToSendTo); 

이것은 매우 간단한 상호 작용 지점의 역할을 할, 당신은 또한 사용자 정의를 만들 필요가 없습니다 것입니다 ... 그것은 수에 보내려고 수업. 일부 순수 주의자는 게시 클래스를 구독자와 연결하기 때문에이 접근 방식에 문제가있을 수 있습니다.

2

내가 오해하지 않는 한, 메신저를 통해 맞춤형 "신호 메시지"유형을 작성하여 전송할 수 없습니까?

public class WeeklyRotationSignal {} 

Messenger.Default.Send(new WeeklyRotationSignal()); 

그런 다음 다른보기 모델에서 그에게 등록 :

Messenger.Default.Register<WeeklyRotationSignal>(this, msg => doWork); 
2

당신은 문자열 태그로 간단한 메시지를 보내는 시도하고 문자열 태그를 일치시켜 해당 메시지를 수신 할 수 있습니다. 이런 식으로 뭔가 : 아마도 ViewModel2 같은 최종 가능성이 다른 파일에있는 위의 해당 메시지에 응답하는 코드의 부분, 무엇인가를 받기 ViewModel1.cs

Messenger.Default.Send<string>("Dummy text message", "String_ToHelpMatchTheMsg"); 

같은에서있는 코드의

보낸 사람 부분 .cs
...

Messenger.Default.Register<string>(this, "String_ToHelpMatchTheMsg", executeThisFunction); 

private void executeThisFunction(string strMsg) 
{ 
    //your code would go here to run upon receiving the message 
    // The following line will display: "Dummy text message" 
    System.Windows.Browser.HtmlPage.Window.Alert("msg passed: " + strMsg); 
} 

위의 메시징 코드와 함께 전달 된 문자 메시지로 수행해야 할 일은 없습니다. 코드의 일부분 만 ping을 코드의 다른 부분으로 보내어 다른 섹션에서 일부 코드를 실행하도록 요청합니다. 중요한 문자열은 보낸 사람과받는 사람을 일치시키는 데 사용되는 키이기 때문에 "String_ToHelpMatchTheMsg"를 사용하는 문자열입니다. 거의 자신의 유사 이벤트를 만드는 것과 마찬가지로 Send 메서드가 실행되면 Register 메서드에 알림이 보내고 자체 함수가 실행됩니다.

이것을 닫으려면 하위 창에서 닫기 버튼과 함께 사용했습니다. 자식 윈도우보기의 닫기 버튼은 childWindowViewModel의 릴레이 명령에 바인딩됩니다. 해당 릴레이 명령은 ParentViewModel에 메시지를 보내려면 위의 코드가 있어야합니다. ParentViewModel의 Register 부분은 초기에 해당 parentViewModel에서 인스턴스화 된 ChildWindow를 닫는 메소드를 실행하여 해당 메시지에 응답합니다.

메시징에 익숙해지면 수신자가 발신자에게 전화를 걸어 상태 또는 일부 데이터를 되돌릴 수 있도록 더 많은 특성을 사용할 수 있습니다. 이를 달성하기 위해 대표자와 람다 함수를 찾으십시오.

이 모든 것은 자식 창을 닫으려면 코드에 코드를 두지 않는 것입니다! :-) 적합하다고 생각되는대로 사용하십시오.

건배. 마리오

관련 문제