Metro.Dialods mit VB.NET

StefanK

Level-1
Beiträge
178
Reaktionspunkte
22
Zuviel Werbung?
-> Hier kostenlos registrieren
Metro.Dialogs mit VB.NET

Hi,

ich entwickle meine Anwendungen mit WPF und VB.NET.

Metro-Design ist zur Zeit voll in, meine Kunden fahren drauf ab. Das Design für Controls usw. gibt es ja schön bei MahApps. Jetzt sollen auch die Dialoge in Metro glänzen. Also google und los...
Gefunden habe ich das:
https://github.com/ErwinCat/Metro.Dialogs

Was mir mittlerweile Kopfschmerzen bereitet, ist das implementieren in mein VB.NET Projekt.

Die Beispielklasse sieht so aus:

Code:
using System;
using System.ComponentModel.Composition;
using System.Reactive.Linq;
using Caliburn.Micro;
using Metro.Dialogs.Controls;


namespace Metro.Dialogs.Example
{
    [Export(typeof (IShell))]
    public class ShellViewModel : Screen, IShell
    {
        private readonly IWindowsDialogs _windowsDialogs;
        private bool _isBusy;
        private double _busyProgress;


        [ImportingConstructor]
        public ShellViewModel(IWindowsDialogs windowsDialogs)
        {
            _windowsDialogs = windowsDialogs;
            InitBreadcrumbs();
        }
//...
// ganz viel (unproblematischer Code...
//...
    }


    public interface IShell
    {
    }
}

Mit Interfaces habe ich noch nix zu tun gehabt, wahrscheinlich macht mir das ganze deshalb soooooooooo viele Probleme.
 
Zuletzt bearbeitet:
Also das habe ich (bisher):

Code:
Imports System.Collections.ObjectModel
Imports SKSE.Dialogs.Wpf
Imports System.ComponentModel
Imports System.Windows.Automation.Peers
Imports System.Windows.Automation.Provider
Imports Caliburn.Micro
Imports System
Imports Metro.Dialogs
Imports System.ComponentModel.Composition
Imports System.Reactive.Linq
Imports Metro.Dialogs.Controls


<Export(GetType(IShell))>
Public Class MainWindow

    Implements IShell

    Private ReadOnly _windowsDialogs As IWindowsDialogs

    Public Sub New()
        InitializeComponent()
    End Sub

    <ImportingConstructor()>
    Public Sub New(windowsDialogs As IWindowsDialogs)
        InitializeComponent()
        _windowsDialogs = windowsDialogs
    End Sub

'...
'...
'...

End Class

Public Interface IShell
End Interface

Leider wird "Public Sub New(windowsDialogs As IWindowsDialogs)" nie durchlaufen und "_windowsDialogs " bleibt nothing...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
stehen denn in dem Interface keine gemeinsam zu benutzenden Proceduren/Methoden drin ?
Die müßtest du doch jetzt in der Klasse auch drin haben ...

Der Konstruktor "New (windowsDialogs As IWindowsDialogs)" wird ja auch nicht von selbst durchlaufen sondern von irgendwo außerhalb beim Anlegen/Instanzieren der Klasse benutzt.

Irgendwie erscheint mir der Teil des Beispiels "ein bißchen" unvollständig ...

Gruß
Larry

Edit:
Ich muss an dieser Stelle noch anhängen, dass ich weder mit c# viel am Hut habe noch mich mit WPF auskenne ...
 
Zuletzt bearbeitet:
Hi und danke für deine Antwort.

Hallo,
stehen denn in dem Interface keine gemeinsam zu benutzenden Proceduren/Methoden drin ?
Die müßtest du doch jetzt in der Klasse auch drin haben ...

Da hast du recht, das war schon mal falsch bei mir. Ich habe jetzt:
Code:
<Export(GetType(IShell))>
Public Class MainWindow : Implements IWindowManager
und somit auch die gemeinsamen genutzenden Proceduren/Methoden.

Der Konstruktor "New (windowsDialogs As IWindowsDialogs)" wird ja auch nicht von selbst durchlaufen sondern von irgendwo außerhalb beim Anlegen/Instanzieren der Klasse benutzt.

Der Konstruktor sollte eigentlich anstatt des Standard-Konstruktors durchlaufen werden, zumindest entnehme ich das dieser Internetseite:
http://msdn.microsoft.com/de-de/library/vstudio/ee155691.aspx#import_and_export_inheritance

Da steht ein kleines Beispiel:
Code:
    Public Class MyExportClass

        'This one will match
        <Export("MajorRevision")>
        Public ReadOnly Property MajorRevision As Integer
            Get
                Return 4
            End Get
        End Property

        <Export("MinorRevision")>
        Public ReadOnly Property MinorRevision As Integer
            Get
                Return 16
            End Get
        End Property
    End Class

Bei meinem Programm wird allerdings der Standard-Konstruktor durchlaufen.

Irgendwie erscheint mir der Teil des Beispiels "ein bißchen" unvollständig ...

Ja, leider. Bin mit deinen Tipps schon einen Schritt weiter, fehlt nur noch der "Rest"... :confused:
 
Hallo Stefan,

also welcher Konstruktor verwendet wird bestimmst doch du beim Instanzieren der Klasse - wenn du beim New das geforderte Objekt mit angibst dann wird auch der andere Konstruktor verwendet (das schlägt dir IntelliSense dann auch schon vor).

Ich habe mir gestern Abend auch noch mal die C#-Source angesehen. Was mir da fehlte war irgendeine Verwendung der Controls - daraus hätte sich ja ggf. etwas ersehen lassen (ein bißchen interpretieren kann ich C# schon).

Gibt es da insgesamt keine anderen Samples ?

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Larry,

ich hätte mich erstmal in das Thema "Caliburn.Micro" reinlesen sollen/müssen. Das ganze ist ein "schmales" MVVM framework for WPF. Das mal einfach in ein bestehendes Projekt nachrüsten.......
Man muss damit beginnen, was für mein (fast) fertiges Programm kaum bis keinen Sinn macht. Ich habe ein bisschen damit rumgespielt, einiges toll, bei anderen Sachen bin ich mir nicht sicher...
Auf jeden Fall lohnt es nicht, nur für ein paar schöne Dialoge ein bestehendes Projekt auf links zu ziehen.

Ich werde mich jetzt allerdings erstmal mit Interfaces und Importe, Exporte, Async und Await beschäftigen. Ich denke, damit kann ich erstmal für mich und meine Projekte ne Menge rausholen...

Danke nochmal für deine Hilfe.
 
Zurück
Oben