2017-06-20 2 views
0

Gibt es eine andere Art und Weise MainWindow ‚s public Variablen zuzugreifen als:Wie Hauptfenster der Variablen aus dem zweiten Fenster zugreifen

MainWindow mainWindow = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault(); 
mainWindow.variable.... 

diese Arbeit gut, aber ich bin die Schaffung einer WPF Anwendung und ein USB Webcam mein Projekt zu integrieren und mit diesem Code oben auf MainWindow Variablen zugreifen. Dies verursacht einige Probleme wie Programm läuft immer noch wenn ich schließe MainWindow und Kamera wird nicht aufhören. Irgendwelche Vorschläge?

+0

Warum versuchen Sie auf öffentliche Eigenschaften eines übergeordneten Fensters zuzugreifen? Wenn Daten vorhanden sind, auf die zwei von ihnen zugreifen müssen, sollten sich diese Daten wirklich in einem anderen Objekt befinden, für beide verfügbar sein oder von dem übergeordneten Element an das untergeordnete Fenster übergeben werden. Werfen Sie einen Blick auf das MVVM-Muster. –

+0

Ich habe Einstellungen in meinem MainWindow und einige Steuerelemente im Einstellungsbereich (Combobox und Label). Ich versuche zu prüfen, welcher Index der Combobox ausgewählt ist (in meinem SecondWindow) – TestMan

+0

dann erstellen Sie eine Klasse, die die Daten enthält, die Sie brauchen, sagen "ControlData". Darin legen Sie einige Eigenschaften und aktualisieren sie aus dem MainWindow. Übergeben Sie diese Klasse an die untergeordneten Fenster, damit er auf diese Eigenschaften zugreifen kann –

Antwort

0

Das i s ein über vereinfachtes Beispiel für das, was ich in den Kommentaren schrieb (Sie sollten sich wirklich mvvm ansehen, das folgende Beispiel ist nicht mvvm).

public class SelectedIndexData 
{ 
    public int SelectedIndex { get; set; } 
} 

public partial class MainWindow : Window 
{ 

    private readonly SelectedIndexData _selectedIndexData = new SelectedIndexData(); 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 


    private void ComboBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     _selectedIndexData.SelectedIndex = ComboBox.SelectedIndex; 
    } 


    private void ShowChildWindow(object sender, RoutedEventArgs e) 
    { 
     new ChildWindow(_selectedIndexData).Show(); 
    } 
} 

public partial class ChildWindow : Window 
{ 
    private SelectedIndexData _selectedIndexData; 
    public ChildWindow(SelectedIndexData selectedIndexData) 
    { 
     InitializeComponent(); 
     _selectedIndexData = selectedIndexData; // do whatever you want with your data here 

    } 
} 
0

Dieser Ansatz arbeitet auch, wenn Sie eine DLL entwickeln (Sie das gleiche über Application.Current.MainWindow nicht sagen können, was sowieso klarer dann Versuch)

DependencyObject ucParent = this.Parent; 
     while (!(ucParent is MainWindow)) 

     { 
      ucParent = LogicalTreeHelper.GetParent(ucParent); 
     } 
     mainview = ucParent as MainWindow; 

Sie können in einem diese Packung Verfahren, die Variablen speichern, die Sie brauchen, und Sie sollten nicht haben Probleme

0

Um Ihnen Anwendung stellen Sie sicher, schaltet sich ab, wenn Hauptfenster geschlossen ist:

public MainWindow() 
    { 
     InitializeComponent(); 
     this.Closing += (sender, args) => Application.Current.Shutdown(); 
    } 
Verwandte Themen