我的问题是,将一些信息从WPF窗口传递到现有的WPF页面。我想通过在WPF Page1上按下一个按钮来打开一个窗口。 然后,我必须将Textbox1中存储的所有文本都变为Page1中的变量。但只有当用户在“窗口”上按下ButtonXY时。我怎样才能解决这个问题,而不使用“绑定”,因为必须在Page1旁边有abig“Switch”子句?在WPF中的两个窗口之间传递内容
回答
让我们假设你有一个MainWindow
和一个SubWindow
。
您的SubWindow
包含一个Button
和一个Textbox
。当您点击Button
中的SubWindow
时,您想要将Text
从Textbox
转入MainWindow
。
主窗口。 您提供了一个Property
(一个Getter和Setter),它将包含传输的Text
字符串。 MainWindow
也包含SubWindow
!不要忘了给MainWindow
传递到SubWindow
构造函数(下面看),所以SubWindow
知道MainWindow
实例
public partial class MainWindow : Window
{
public string Text { get; set; }
private Window subWindow;
public MainWindow()
{
InitializeComponent();
subWindow = new SubWindow(this);
subWindow.Show();
}
}
子窗口
public partial class SubWindow : Window
{
private Window mainWindow;
public SubWindow(Window mainWindow)
{
this.mainWindow = mainWindow;
InitializeComponent();
}
private void ButtonTransferTheData_Click(object sender, RoutedEventArgs e)
{
mainWindow.Text = myTextBoxInSubWindow.Text;
}
}
你SubWindow
知道MainWindow
。所以你可以访问Text Property
。在按钮上,单击您将Text
从Textbox
转换为MainWindow
的Property
。
提示 的mainWindow.Text = myTextBoxInSubWindow.Text;
线可能抛出异常。这是因为你想访问另一个线程。 所以你需要派遣它。将此行更改为:
Dispatcher.Invoke(() => mainWindow.Text = myTextBoxInSubWindow.Text);
希望这有助于。
如果您使用的是MVVM,那么窗口和页面都可以有一个共同的ViewModel,并且这些文本框应该绑定到UpdateSourceTrigger设置为PropertyChanged的同一个属性,这样不需要更多的事件或通知。
否则,有时我倾向于创建一个全球项目,将在需要时添加为参考。这样,您就可以设置事件和他们的处理程序来完成您的特定问题。我认为这不是一个优雅的解决方案,但它可以帮助我在不同的项目或类之间进行很多沟通。
创建一个新类,其中包含要在所有窗口之间传输的所有数据。
public YourNewClassWithSettings
{
string StringNumber1;
string StringNumber2;
}
在主窗口中创建此类的实例并设置所需属性的值。
通过引用您的下一个窗口的构造函数传递YourNewClassWithSettings的实例。
YourNewClassWithSettings test = new YourNewClassWithSettings();
test.StringNumber1 = "mySetting";
WindowControl w = new WindowControl(ref test);
w.ShowDialog();
//See what was changed!!!!
string changedValue = test.StringNumber1; //Will be "IamDone"
在你的构造函数,你会说:
public WindowControl(ref YourNewClassWithSettings test)
{
// example: You can now say TextBox1.Text = test.StringNumber1;
// Whatever you change here like test.
test.StringNumber1 = "IamDone";
//When you close this window, because test was passed by ref : you
// will see StringNumber1 = "IamDone" in your main window again
//when accessing the property of that class. Always pass by ref
this.Close();
}
这是MVVM的做法。
- 1. 两个窗口之间的wpf事件
- 2. 如何在html中的两个窗口之间传递参数[父窗口和子窗口之间的值]
- 3. 如何在两个WPF窗口之间传递自定义对象
- 4. 在WPF中传递一个窗口和一个页面之间的值
- 5. 同时在两个窗口之间共享内容
- 6. 通过fxml设置的两个JavaFX窗口之间传递值?
- 7. 在窗口之间传递并写入
- 8. 在窗口之间传递信息ASP.net
- 9. 在全局窗口之间传递值
- 10. 在一个xib文件中的两个窗口之间传递数据?
- 11. 如何在PyGtk中的两个类/窗口之间传递变量?
- 12. WPF在2个窗口之间切换
- 13. wpf中两个独立窗口之间的相互作用
- 14. 在两个窗体窗体之间传递值
- 15. 在父窗口和子窗口之间传递值
- 16. 如何在父窗口和子窗口之间传递值
- 17. 如何在WPF中的两页之间传递值
- 18. C#在两个页面之间传递数据WPF MVVM
- 19. 在WPF中的两个窗口之间共享同一个对象
- 20. 在Firefox中不工作的窗口之间传递值的JavaScript
- 21. 在Visual Studio中使用C#在3个窗口窗体之间传递数据
- 22. 如何在两个kendo UI窗口控件之间传递数据
- 23. PyQT4 - 两个窗口之间的通信
- 24. 在2个窗口之间传递数据。 Qt
- 25. 在两个TableView之间传递数据
- 26. 在两个类之间传递变量
- 27. 在两个UIViewControllers之间传递数据
- 28. 传递两个页面之间的值wpf
- 29. 使用属性在两个窗体之间传递数据
- 30. 在两个窗体之间传递字符串时出错
只需将您的模型传递给第二个窗口,然后在第二个窗口上处理更新,那么您不需要传递任何它们都将同时具有所有数据的任何东西。 – Franck