FirstName LastNameとGPAという名前の3つのテキストボックスを持つWPFフォームがあり、データベースに挿入する前にそれらのコンテンツを確認したいと思います。しかし、私は別のクラスでこれを行おうとしています。クラスからテキストボックスコントロールにアクセスするにはどうすればよいですか?WPFウィンドウの名前はAddStudentで、チェックしたいクラスの名前はConsisteです。Consisteを静的にしたので、インスタンスを作成せずにAddStudentで使用できます。
3 に答える
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);
一般に、UI要素をバックエンドコード(UIプロジェクト内のヘルパーでさえ)に渡すことは良い考えとは見なされません。
おそらく、AddStudentフォームはConsisteクラスのメソッドを呼び出しています。Consisteクラスがフォームに戻ってテキストボックスにアクセスするのではなく、メソッド呼び出しで値をConsisteクラスに渡す必要があります。
Model-View-ViewModelデザインパターンに従っている場合(これは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>
最後に、フォームをインスタンス化するときに、フォームのDataContextとして使用する新しいViewModelを作成します。
var myFormContext = new MyFormViewModel();
var dialog = new MyForm { DataContext = myFormContext };
UIに対して直接コーディングするのではなく、この余分な作業を行う理由は、コードをより整理された状態に保つのに役立つためです。将来的には、同じViewModelクラスを複数のビューで再利用したり、すべてのコードで変更のカスケードを作成せずにユーザーインターフェイスを再配置したりする方が簡単です。したがって、長期的には、MVVMパターンに従うことは、すぐに始めるのに非常に良い習慣です。
このようにコードを構造化すると簡単になる具体的な例として、MVVMコードで動作するように構築されたデータ検証メカニズムであるIDataErrorInfoインターフェイスがすでにWPFにあります。あまり問題なくViewModelに実装してから、検証を期待するようにバインディングにマークアップを追加すると、そこで実行できます。ただし、ユーザーにエラーについて警告する方法をカスタマイズする場合は、コントロールに自分にErrorTemplate
合わせてスタイリングできるもの。