0

I have an WPF form with 3 textbox named FirstName LastName and GPA, and i want to check their content before inserting into the database. But i am trying to do this in another class. How can i make to access the textbox control from my class? the WPF window is named AddStudent and the class i want to make the check is named Consiste. I made Consiste static so i can use it on my AddStudent without creating an instance.

4

3 回答 3

1

在你的 Util 类中,你必须只有带有输入参数的方法

public static bool Validate(string firstName, string lastName,string gPA)
{
   if(firstName.Length < 1)  
   .....

   return true;
}

并调用这个静态类 Util

Util.Validate(FirstName.Content, LastName.Content, GPA.Content);
于 2012-07-31T14:17:27.920 回答
0

一般来说,将 UI 元素传递到后端代码(甚至是 UI 项目中的助手)并不是一个好主意。

大概 AddStudent 表单正在调用 Consiste 类的方法。您的方法调用应该将值传递给 Consiste 类,而不是让 Consiste 类返回表单以获取文本框。

于 2012-07-31T14:24:58.217 回答
0

如果您遵循模型-视图-视图模型设计模式,这是推荐的,因为这是 WPF 设计的一个,那么一般方法是这样的:

首先,创建一个 ViewModel 类作为数据的实际存储。(ViewModel 可能应该实现INotifyPropertyChanged,但为了简洁起见,我将在此处跳过它。)

public class MyFormViewModel
{
    public string FirstName {get; set;}
    public string LastName {get; set;}
    public float GPA {get; set}
}

此类的属性是公开的,因此它们在任何地方都可见。

然后,创建一个表单并使用绑定将其字段连接到您的属性:

<Window x:Class="MyNamespace.MyForm">
    <StackPanel>
        <TextBox Text={Binding FirstName}/>
        <TextBox Text={Binding LastName}/>
        <TextBox Text={Binding Gpa}/>
    </StackPanel>
</Window>

最后,当您实例化表单时,创建一个新的 ViewModel 用作表单的 DataContext:

var myFormContext = new MyFormViewModel();
var dialog = new MyForm { DataContext = myFormContext };

进行这种额外工作而不是直接针对 UI 进行编码的原因是,它有助于使您的代码更有条理。在接下来的道路上,使用多个视图重用相同的 ViewModel 类或重新排列用户界面更容易,而无需在所有代码中创建这样的级联更改。因此,从长远来看,遵循 MVVM 模式是一个非常好的习惯,可以立即养成。

作为一个具体示例,如果以这种方式构建代码会更容易,WPF 中已经有一个数据验证机制可以与 MVVM 代码一起使用:IDataErrorInfo接口。您可以在 ViewModel 中轻松实现它,然后在绑定中添加一些标记,告诉他们期待验证,您可以在那里完成 - 尽管如果您想自定义如何警告用户错误,控件有一个ErrorTemplate你可以设计适合的。

于 2012-07-31T14:28:11.567 回答