多个窗口
回答
在app.xaml
文件的解决方案,它指定了窗口在启动时运行。打开另一个窗口的快速解决方案是在启动窗口的Loaded
事件的事件处理程序上打开第二个窗口。
但是,如果这是一个大型项目的一部分,那么解决方案的可扩展性不是太大。有一个单独的类可以打开每个窗口,那么这两个窗口都不需要知道另一个窗口。
至于在它们之间传递数据,使用事件可以提供更松散耦合的解决方案。我会推动更多MVVM(Model-View-ViewModel)架构,然后让每个ViewModel引发其他人可以响应的事件。你可以声明自己的子类EventArgs
,它将提供需要传递的信息。
更新
对不起,响应延迟。简单地说,要让一个窗口与另一个窗口共享数据,接收方必须有办法接收这些数据。在接收者中定义一个公共属性将允许发送者通过简单的属性调用来指定数据。默认情况下,窗口的控件是内部的,所以你可以在同一个程序集中访问它们,但这不是最好的方法。
WPF有一个非常丰富的绑定基础结构,您应该利用它。要做到这一点,向窗口提供数据的对象需要实现INotifyPropertyChanged
接口。这将提醒用户界面数据已更改,并且绑定应使用已更改的数据更新目标。描述接口的MSDN页面以及示例实现可以在here找到。
当你实现该接口时,会暴露一个事件(PropertyChanged
),当数据发生变化时它将触发。向另一个窗口提供数据的对象可以注册一个事件处理程序来侦听这些更改,然后它将具有更新的值。
下面是带有FirstName和LastName属性的简单类的示例实现。
class FirstNameViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string firstName;
public string FirstName
{
get { return firstName; }
set
{
if(firstName == value)
return;
firstName = value;
if(PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("FirstName"));
}
}
private string lastName;
public string LastName
{
get { return lastName; }
set
{
if(lastName == value)
return;
lastName = value;
if(PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("LastName"));
}
}
}
你可以看到这里有一些代码重复 - 这通常被重构为一个基本的ViewModel类。你会看到这暴露了PropertyChanged
事件。将事件处理程序附加到它,并在处理程序收到的PropertyChangedEventArgs
对象中,PropertyName
属性将包含已更改属性的名称(与传递给上面每个设置器中的构造函数的字符串相同)。 sender
参数将是对象本身的引用。将其转换为正确的类型,您将可以访问属性。
希望能让你开始。我写了一个非常有人气的样本,如果你想看,我可以上传到某个地方。它打开2个窗口,然后您可以看到在一个窗口中键入会使输入的文本出现在另一个窗口中,反之亦然。
如果你想通过窗口之间的数据,你应该有一个指针在每个窗口中的另一个窗口。要么是这样,要么你可以阅读使用单例类。如果您希望Windows共享设置,而不是在它们之间发送大量数据,这很方便。
- 1. 合并多个窗口,一个窗口
- 2. gtkmm - 多个窗口/弹出窗口
- 3. tkinter中多个窗口的多个窗口大小
- 4. Mac - 多个窗口或多个视图?
- 5. MVVM和多个窗口
- 6. wxpython - 多个TextEntryDialog窗口
- 7. Pygame与多个窗口
- 8. 与QT的多个窗口
- 9. 多个顶级窗口
- 10. Java Swing:多个窗口
- 11. WPF覆盖多个窗口
- 12. 显示多个新窗口
- 13. PyQt4中的多个窗口?
- 14. 跨越多个窗口的Perisistant窗口10个虚拟桌面?
- 15. 单个窗口中的多个图
- 16. 一个窗口,多个视图(VB .Net)
- 17. 在多个窗口中共享窗口小部件Tcl/Tk
- 18. 多窗口处理
- 19. 多窗口程序
- 20. Xcode - 很多窗口
- 21. 与多个模式窗口的Jquery ajax
- 22. MAP上的多个信息窗口
- 23. 更新和多个控制台窗口
- 24. Datawindow sharedata为多个数据窗口
- 25. 防止多个JFrame窗口打开
- 26. Slick.js和多个Twitter Bootstrap模态窗口
- 27. 级联JFrames以打开多个窗口
- 28. 跨多个窗口的XAML C#功能
- 29. jquery弹出jqModal多个对话窗口
- 30. OpenGL多个子窗口问题
谢谢,你能给我一个例子如何将数据从一个窗口传递到另一个窗口?例如,我可以简单地从另一个窗口访问UI控件吗? – internetmw 2010-09-11 21:42:15
我添加了一些更多的细节以及代码示例。这有帮助吗? – 2010-09-13 03:33:01