是否有其他方式可以访问MainWindow
的{{1}}个变量而不是:
public
这项工作很好,但我正在创建一个MainWindow mainWindow = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();
mainWindow.variable....
应用程序并将WPF
集成到我的项目中,并使用上面的代码访问USB Webcam
的变量。当我关闭MainWindow
并且相机不会停止时,这会导致程序仍在运行等问题。
有什么建议吗?
答案 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
}
}