2011-01-26 2 views
1

다음 C# 코드를 VB로 변환하려고합니다. 시도한 온라인 변환 페이지의 결과는 나에게 의미가 없으며 VS2010은 결함으로 표시됩니다.특정 C#에서 VB 로의 변환 문제

public interface IRequestCloseViewModel 
{ 
    event EventHandler RequestClose 
} 

그리고이 기본 클래스에서 사용됩니다 :

public class ApplicationWindowBase : Window 
{ 
    public ApplicationWindowBase() 
    { 
     this.DataContextChanged += new DependencyPropertyChangedEventHandler(this.OnDataContextChanged); 
    } 

    private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e) 
    { 
     if (e.NewValue is IRequestCloseViewModel) 
     { 
       // if the new datacontext supports the IRequestCloseViewModel we can use 
       // the event to be notified when the associated viewmodel wants to close 
       // the window 
      ((IRequestCloseViewModel)e.NewValue).RequestClose += (s, e) => this.Close(); 
     } 
    } 
} 
이벤트에 대한 내 제한 C#을 지식

MVVM 샘플은이 인터페이스를 사용하여 ...이 일을 해결하는 것만으로는 충분하지 않습니다

올바른 VB .NET 번역은 어떤 모양입니까?

+0

당신은 온라인 변환 도구가 생성 한 코드를 공유 할 수 있습니까? –

답변

2

이 당신을 위해 그것을 수행해야합니다

Public Interface IRequestCloseViewModel 

    //Event RequestClose As EventHandler 
    Event RequestClose(ByVal sender As Object, ByVal e As EventArgs) 

End Interface 

Public Class ApplicationWindowBase 
    Inherits Window 

    Public Sub New() 
     AddHandler Me.DataContextChanged, AddressOf OnDataContextChanged 
    End Sub 

    Private Sub OnDataContextChanged(ByVal sender As Object, ByVal e As DependencyPropertyChangedEventArgs) 

     Dim request = TryCast(e.NewValue, IRequestCloseViewModel) 

     If request IsNot Nothing Then 
      AddHandler request.RequestClose, Sub(sender, event) Me.Close 
      //Bear in mind you cannot do Sub(x,y) in VS pre 2010  
     End If 

    End Sub 

End Class 
+0

불스 아이 가까이. 내가 바꾼다면 : Function (s, e) Me. Sub (s, e) Me.Close를 조금 더 잘 닫는다. VS2010은 변수를 숨기는 λ 매개 변수에 대해 불평합니다. 하지만 Sub (s, e1)로 변경하면 컴파일됩니다. –

+0

아, 그래, 그냥 새로운 winForms 프로젝트에 입력했는데 모든 참조가 없기 때문에 다른 오류가있어서 그 중 하나를 얻지 못했습니다. – Pondidum

+0

테스트 실행을 위해 약간 수정 된 코드를 가져 와서 매력처럼 작동합니다. 감사! –