如何从第二个 Window 访问 MainWindow 的变量
How to access MainWindow's variables from second Window
除了 :
之外,还有其他访问 MainWindow
的 public
变量的方法吗
MainWindow mainWindow = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();
mainWindow.variable....
这工作正常,但我正在创建一个 WPF
应用程序并将 USB Webcam
集成到我的项目中,并使用上面的代码访问 MainWindow
的变量。这会导致一些问题,例如当我关闭 MainWindow
时程序仍然是 运行 并且相机不会停止。
有什么建议吗?
如果您正在开发一个 dll,这种方法也适用(您不能告诉 Application.Current.MainWindow,这比您的尝试更清楚)
DependencyObject ucParent = this.Parent;
while (!(ucParent is MainWindow))
{
ucParent = LogicalTreeHelper.GetParent(ucParent);
}
mainview = ucParent as MainWindow;
你可以把它打包到一个方法中,保存你需要的变量,你应该不会有问题
要确保您的应用程序在 MainWindow 关闭时关闭:
public MainWindow()
{
InitializeComponent();
this.Closing += (sender, args) => Application.Current.Shutdown();
}
这是我在评论中写的一个过度简化的例子(你真的应该看看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
}
}
除了 :
之外,还有其他访问MainWindow
的 public
变量的方法吗
MainWindow mainWindow = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();
mainWindow.variable....
这工作正常,但我正在创建一个 WPF
应用程序并将 USB Webcam
集成到我的项目中,并使用上面的代码访问 MainWindow
的变量。这会导致一些问题,例如当我关闭 MainWindow
时程序仍然是 运行 并且相机不会停止。
有什么建议吗?
如果您正在开发一个 dll,这种方法也适用(您不能告诉 Application.Current.MainWindow,这比您的尝试更清楚)
DependencyObject ucParent = this.Parent;
while (!(ucParent is MainWindow))
{
ucParent = LogicalTreeHelper.GetParent(ucParent);
}
mainview = ucParent as MainWindow;
你可以把它打包到一个方法中,保存你需要的变量,你应该不会有问题
要确保您的应用程序在 MainWindow 关闭时关闭:
public MainWindow()
{
InitializeComponent();
this.Closing += (sender, args) => Application.Current.Shutdown();
}
这是我在评论中写的一个过度简化的例子(你真的应该看看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
}
}