VB.net - wpf - Objekte an Page übergeben

auron2008

Well-known member
ID: 314827
L
15 Juli 2008
803
49
Hi,

hab folgendes Problem. Ich schreibe eine Anwendung in VB.net und nutze wpf (ist so vorgegeben). Der Sinn ist es eine Verbindung mit einem Gerät aufzubauen und die Einstellunegn auszulesen. Was das für ein Gerät ist spielt keine Rolle. Es gibt eine Klasse die sich Modul nennt, dabei wird schon alles geregelt. (verbindung herstellen und die gesamte Kommunikation)

Meine Anwendung besitzt im MainWindow.xaml ein Tabcontrol und die TabItems werden über <Frame Source="xxx.xaml"/> gefüllt. Ich habe zwei Pages, eine Load und eine Setting. In der Load Page wird ein Objekt aus der Klasse Modul erstellt. Wenn die Verbindung hergestellt ist wird ein Event aufgerufen "ConnectionSuccessful" .

Code:
<Controls:MetroWindow x:Class="MainWindow"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" MinWidth="800" MinHeight="396">

    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colours.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseDark.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.AnimatedSingleRowTabControl.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <Menu>
            <MenuItem>test</MenuItem>
        </Menu>
        <TabControl>
            <TabItem Header="Verbinden" >
                <Frame Source="Pages/Load.xaml"/>
            </TabItem>
            <TabItem Header="Einstellungen">
                <Frame Source="Pages/Setting.xaml"/>
            </TabItem>
        </TabControl>
    </Grid>
</Controls:MetroWindow>

Bis hierhin ist es kein Problem, aber jetzt wechsel ich auf den Nächsten Tab wo die setting.xaml geladen wird. An diese setting.xaml.vb müsste ich das erzeugte Objekt übergeben um die Einstellungen auszulesen. Dieses vrogehen ist notwendig da ich über die setting datei wieder EInstellungen an das Gerät senden muss.

Kann mir jemand sagen wie man sowas anstellt bzw einen Tipp geben ? :D
 
Ich würde das Modul als Member vom MainWindow definieren und dann über entsprechende Methoden von den Tabs aus darauf zugreifen.
 
Kannst du mir das näher erläutern wie man das genau anstellt ? Muss dazu sagen das dieses Host Programm eher eine Nebenaufgabe von mir ist, ich also in vb.net nicht gerade ein experte bin.

Hab inzwischen auch zwei andere Lösungen die sich sehr ähneln. Einmal das Object als Public shared erzeugen, was aber wohl nicht gerade im Sinn der OOP liegt. Die andere ist es als Public zu erzeugen und in jeder Page einem gleichen Object zuzuweisen.

Code:
Modul = CType(Application.Current.MainWindow, MainWindow).MainModul

Das funktioniert recht Prima. :D und ist recht unkompliziert.