我的WPF应用程序中有两个窗口:登录窗口和选项窗口。两者都具有相同的表单,其中包含用户名和密码字段,以及用于提供凭据的其他一些字段。我想要一些知道例如可用的txt_userName
TextBox
的代码,并且可以基于此做一些事情。我以为我可以创建某种IHaveCredentialsForm
接口并让LoginWindow
和OptionsWindow
实现它,但是当我尝试时,我得到了''MyNamespace.LoginWindow'没有实现接口成员'MyNamespace.IHaveCredentialsForm.txt_userName'”。到目前为止,这是我的界面:
interface IHaveCredentialsForm
{
TextBox txt_userName { get; set; }
}
我原以为自己收到了错误,因为LoginWindow
是继承自partial
的{{1}}类。我绝对可以在Window
的方法中访问名为TextBox
的{{1}},但我没有明确定义这样的属性。我假设在LoginWindow.xaml中有一个txt_userName
具有该名称,这神奇地出现了。
我怎样才能干这个?我已经有了一个方法来处理用户名,密码等LoginWindow
值的东西,但是有两个不同的类传入TextBox
似乎是多余的 - 与同样的方法。
虽然我在这,但我怎么能在两个不同的窗口之间共享一大块XAML(凭证格式)?
答案 0 :(得分:3)
您可以通过creating可重复使用的user control来解决这个问题,您可以将这两种形式放在这两个表单上。
答案 1 :(得分:1)
我会将逻辑从代码中移出并进入一个单独的类。然后使用数据绑定将类中的属性链接到UI中的文本框。
类似的东西:
//ViewModel class
public class UserViewModel
{
public string Username { get; set; }
public string Password { get; set; }
}
<!--View XAML-->
<TextBox x:Name="txt_username" Text="{Binding Username}" />
<TextBox x:Name="txt_password" Text="{Binding Password}" />
这不仅会阻止您重复自己,而且是很好的做法,因为它可以让您分别从UI测试业务逻辑代码。
对于WPF,这种类型编程的流行设计是MVVM模式。有一个问题here可以帮助您掌握基础知识,并在更广泛的网络中提供大量的教程。
将所有逻辑移出后,您可以创建一个UserControl来保存两个文本框(及其绑定)的XMAL,这两个文本框可以在两个视图中使用,这样您就不会重复这些。
使用这种方法的几个快速说明: