私はWPFとMVVMを初めて使用し、アプリの設計方法に多くの苦労をしており(したがって、ここで多くの質問があります)、リファクタリングを実行しようとしています。SQLバックエンドがあり、LINQtoSQLを使用しているので、LINQTOSQLが生成するクラスが私のモデルになります。モデルクラスをビューから遠ざける方法の優れた包括的な例はまだ見ていません。現在見ている例では、ビューはModelClass.Somethingを参照するViewModelプロパティではなく、ModelClass.Somethingにバインドされています。これが悪いと思うのは正しいですか(そのフィールドがデータベースで変更された場合、ビューが壊れます)?
現在私が苦労しているのはドロップダウンリストです。例:IDとテキストフィールドを備えたMessageTypeというルックアップテーブルと、それらをフェッチするためのリポジトリメソッドがあります。したがって、私のビューでは、DisplayMemberPathパスとSelectedValueパスをモデルのMessageTypeクラスのフィールドにバインドしないようにしたいので、新しいクラスを作成して、そのクラスのプロパティをViewModelで公開する必要がありますか?このような:
public class MessageTypeViewModel : ViewModelBase
{
public MessageTypeViewModel(MessageType t)
{
MessageTypeText = t.messageTypeText;
MessageTypeId = t.messageTypeId;
}
public string MessageTypeText { get; private set; }//bind DisplayMember and SelectedValue to these properties
public int MessageTypeId { get; private set; }
}
このように入力します:
get
{
if (textMessageSelectionOptions == null)
{
var list = repository.GetMessageTypes().Select(x=>new MessageTypeViewModel(x)).ToList();
textMessageSelectionOptions =new ReadOnlyCollection<MessageTypeViewModel>(list);
}
return textMessageSelectionOptions;
}
また、MessageTypeへの外部キーを持つMissionオブジェクトがあるので、この新しいクラスがある場合、コンボボックスのSelectedItemをmission.MessageTypeにバインドするにはどうすればよいですか?ミッションオブジェクト、その子、およびその親のパターンを取得するのに本当に苦労しており、MVVMを使用してCRUD操作を行っている包括的な例を見つけることができません。私は上を行き過ぎているのですか、それとも何かが足りないのですか?