Конкретная проблема преобразования C # в VB - PullRequest
1 голос
/ 26 января 2011

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

Образец 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?

1 Ответ

2 голосов
/ 26 января 2011

Это должно сделать это для вас:

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