Nikhil Agrawal
Nikhil Agrawal

Reputation: 48550

Add Eventhandlers in VB.Net like C# does in constructor?

I have a code snippet in C# which i want to convert into VB.Net

public class ModuleAViewOne : UserControl
{
    public ModuleAViewOne(ModuleAViewOneViewModel model)
    {
        InitializeComponent();

        this.Loaded += (s, e) =>
        {
            this.DataContext = model;
        }
    }
}

I converted it into VB.Net this way

Partial Public Class ModuleAViewOne
 Inherits UserControl

Public Sub New(ByVal model As ModuleAViewOneViewModel)
        InitializeComponent()

        Me.model = model

        AddHandler Loaded, AddressOf _Loaded
    End Sub

    Dim model As ModuleAViewOneViewModel

    Private Sub _Loaded(ByVal s As Object, ByVal e As RoutedEventArgs)
        DataContext = model
    End Sub
End Class

but can event be written inside constructor so that I do not have to create a new global model variable?

Upvotes: 1

Views: 415

Answers (1)

sloth
sloth

Reputation: 101122

You can simply use a lambda expression

Public Sub New(model As ModuleAViewOneViewModel)
    InitializeComponent()

    AddHandler Loaded, Sub(s, e) DataContext = model
End Sub

Or, since VB 10.0 (shipped with Visual Studio 2010), you can use a multiline lambda:

Public Sub New(model As ModuleAViewOneViewModel)
    InitializeComponent()

    AddHandler Loaded, Sub(s, e) 
                          DataContext = model
                       End Sub
End Sub

Upvotes: 3

Related Questions