C# WPF-如何从另一个/或第一个窗口获取数据
晚上好, 我现在在我的项目中有几个窗口。第一个是标准登录窗口。此窗口指定SQL server上登录的服务器名、用户名和密码。如果输入正确,您将被连接并路由到下一个窗口。这是完美的 在第二个窗口中,有一个列表框,其中包含登录服务器中现有数据库的列表,以及一个显示所选(来自列表框)数据库的表的列表视图。这同样有效 但是 它之所以有效,是因为我在代码中手动输入了SQLConnection数据。因此:C# WPF-如何从另一个/或第一个窗口获取数据,c#,wpf,C#,Wpf,晚上好, 我现在在我的项目中有几个窗口。第一个是标准登录窗口。此窗口指定SQL server上登录的服务器名、用户名和密码。如果输入正确,您将被连接并路由到下一个窗口。这是完美的 在第二个窗口中,有一个列表框,其中包含登录服务器中现有数据库的列表,以及一个显示所选(来自列表框)数据库的表的列表视图。这同样有效 但是 它之所以有效,是因为我在代码中手动输入了SQLConnection数据。因此: SqlConnection con = new SqlConnection("Server=serve
SqlConnection con = new SqlConnection("Server=servername;User Id=username;Password=password;");
现在,如何将先前输入的登录数据输入到第二个窗口中,以便使用它们显示登录服务器中的数据库
在登录窗口中,很容易通过“Server=listboxservername.Text”等使用输入的数据,但我不能在第二个屏幕中使用。代码:
public const string CONSTRING = "Server={0};User Id={1};Password={2};";
SqlConnection con = new SqlConnection(String.Format(CONSTRING, txtbServer.Text, txtbUsername.Text, txtbPassword.Password));
现在,如何将先前输入的数据输入到第二个窗口中,以便能够继续使用它们
谢谢你的支持
Dave
(请原谅我的IT英语不好)
这听起来像是在编写一个紧密耦合的应用程序,其中windows保存了所有数据。这是一种在WinForms中很常见的模式,但在WPF中,MVC模式(通常称为模型-视图-视图-模型)已被超越 这给您带来的最大优势是允许在不同视图之间共享数据,无论这些视图是窗口还是控件。因此,在您的情况下,您可以创建一个对象来保存所有数据,让我们将其称为
MyModel
,然后与您的两个窗口共享
然而,这只是MVVM的前半部分。通常,除了模型之外,还定义一个ViewModel类,该类将数据转换为用户界面直接可用的表单,并使用INotifyPropertyChanged
或从该类继承的基类。最后,视图通过绑定到VM并侦听属性更改来从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}"/>
祝你好运。在用WPF编写一行代码之前先学习MVVM。说真的。在新版本中,你在ctor中传递信息。我想把所有这些代码块都写进业务逻辑中?!所以我有一个类sqlconnection等,它只是供私人使用和练习C#,SQL和WPF。因为我现在正在做学徒,我只是想习惯wpf和sql的结合。
var w = new MainWindow();
w.DataContext = myViewModel;
w.Show();