2011-01-26 3 views
1

Я пытаюсь преобразовать следующий код C# в VB. Результаты с онлайн-страниц конверсии, которые я пробовал, для меня не имеют смысла, и VS2010 отмечает их как недостатки. Мой ограниченный C# знание о событиях, не достаточно, чтобы решить этот ...Конкретная проблема преобразования C# в VB

Образец MVVM использует этот интерфейс:

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(); 
     } 
    } 
} 

Каков будет правильный перевод 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

Рядом с bullseye. Если я изменил: Function (s, e) Me.Close to Sub (s, e) Me.Close это работает немного лучше. VS2010 жалуется на то, что параметр лямбда e скрывает переменную. Но если я перейду на Sub (s, e1), он скомпилируется. –

+0

Ах, да, я бы просто ввел это в новый проект winForms, и поскольку у него не было всех ссылок, у меня были другие ошибки и я не получил этого. Я обновил свой ответ с вашими исправлениями – Pondidum

+0

Я взял слегка модифицированный код для тестового прогона, и он работает как шарм. Благодаря! –

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