这听起来就像您正在编写一个紧密耦合的应用程序,而您的窗口包含所有数据。这是一种在 WinForms 中很常见的模式,但在 WPF 中已经超越了通常称为MVVM或 Model-View-ViewModel 的 MVC 模式。
这给您带来的最大优势是允许在不同视图之间共享您的数据,无论这些视图是窗口还是控件。因此,在您的情况下,您将创建一个对象来保存所有数据,让我们调用它MyModel
,然后与您的两个窗口共享它。
然而,这只是 MVVM 的前半部分。通常除了模型之外,您还定义了一个 ViewModel 类,它将数据转换为您的 UI 可直接使用的表单,并使用INotifyPropertyChanged
或继承自该表单的基类。最后,视图通过绑定到它并侦听属性更改来从 VM 中获取数据,以便它可以更新。
所以把它们放在一起你可能会有类似的东西
public class MyModel
{
public string User {get;set;}
public SqlConnection Connection {get;set;}
}
public class ViewModel : INotifyPropertyChanged
{
private MyModel _model = new MyModel();
public string Server
{
get { return _model.Connection.DataSource; }
set
{
_model.Connection.DataSource= value;
OnPropertyChanged("Server");
}
}
public string User
{
get { return _model.User; }
set
{
_model.User = value;
OnPropertyChanged("User");
}
}
public string Password
{
set { _model.Connection.Credential = new Credential(_model.user, value); }
}
// Syntax varies depending on which MVVM library you are using
public XXXXCommand ConnectCommand
{
get
{
return new XXXXCommand(
canExecute => !Connection.IsConnected,
() => Connection.Connect()
);
}
}
在你的窗口
<TextBox x:Name="txtbServer" Text="{Binding Server}"/>
<TextBox Text="{Binding User}"/>
<TextBox Text="{Binding Password, Mode=OneWayToSource}"/> <!--Although you would really use a PasswordBox here-->
<Button Content="Connect" Command="{Binding ConnectCommand}"/>
最后,通过设置窗口的..将View
和链接在一起ViewModel
DataContext
var w = new MainWindow();
w.DataContext = myViewModel;
w.Show();
祝你好运。