如何从第二个Window访问MainWindow的变量

时间:2017-06-20 06:43:14

标签: c# wpf camera mainwindow

是否有其他方式可以访问MainWindow的{​​{1}}个变量而不是:

public

这项工作很好,但我正在创建一个MainWindow mainWindow = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault(); mainWindow.variable.... 应用程序并将WPF集成到我的项目中,并使用上面的代码访问USB Webcam的变量。当我关闭MainWindow并且相机不会停止时,这会导致程序仍在运行等问题。 有什么建议吗?

3 个答案:

答案 0 :(得分:0)

如果你正在开发一个dll(你不能告诉Application.Current.MainWindow,这比你的尝试更清楚),这种方法也有效。

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

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

您可以将其打包到方法中,保存您需要的变量,并且不应该有问题

答案 1 :(得分:0)

确保应用程序在MainWindow关闭时关闭:

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

答案 2 :(得分:0)

这是我在评论中写的内容的简化示例(你真的应该看看mvvm,下面的例子是不是 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

    }
}