###概要
現在、C#でWPFアプリケーションを作成しています。一種のメモ帳なのですが、Evernoteのように、タグ管理ができるようにしたいと考えております。手始めに、「データベースから取得したタグ一覧をリストボックスに表示する」ようにしているのですが、MVVMの考え方が身についておらず、四苦八苦しています(むしろ、オブジェクト指向の理解が足りない可能性も)。
また、表示項目に「タグを指定しない」という選択肢をどう追加するかにも悩んでいます。
###質問①
以下のコード、TagListVMクラスが無駄に見えます。startupでTagListVMのコンストラクターを呼び出し、さらにその中でTagListのコンストラクターを呼ぶという構成も変です。また、変数名なども全体的に極めて分かりにくいです(tagListって何回出てくるねん!)。あと、publicだらけです。改善の指針を提示してくださるとありがたいです。
###質問②
以下のコードに、「タグを指定しない」選択肢を加えるには、どのようにするのがよいでしょうか。「Tagクラスにコンストラクターを追加→Tag notSpecify = new Tag(...)などとして生成→tagListにadd」という方法は考えましたが、「タグを指定しない」というのはタグではないので、ふさわしくないですよね。TagListをTagCommandListのようにして……というのも考えたのですが、無駄に複雑化する気がします。
###コード
xml
1<ListBox ItemsSource="{Binding tagList}" DisplayMemberPath="name" />
C#
1 public partial class App : Application 2 { 3 public void startup(object sender, StartupEventArgs e) 4 { 5 TagListVM tagListVM = new TagListVM(); 6 } 7 } 8 9 public class TagList 10 { 11 public List<Tag> tagList { get; private set; } 12 13 public TagList() 14 { 15 tagList = new List<Tag>(); 16 17 using (SQLiteConnection connection = new SQLiteConnection("DataSource = xxxx.db")) 18 { 19 connection.Open(); 20 using (DataContext context = new DataContext(connection)) 21 { 22 Table<Tag> tagTable = context.GetTable<Tag>(); 23 IQueryable<Tag> queryResult = 24 from t in tagTable 25 select t; 26 foreach (Tag t in queryResult) 27 { 28 tagList.Add(t); 29 } 30 } 31 } 32 } 33 } 34 35 [Table(Name = "tag")] 36 public class Tag 37 { 38 [Column(Name = "tagID", DbType = "INT")] 39 public int id { get; private set; } 40 41 [Column(Name = "name", DbType = "TEXT")] 42 public string name { get; private set; } 43 } 44 45 public class TagListVM 46 { 47 public List<Tag> tagList { get; private set; } 48 49 public TagListVM() 50 { 51 tagList = new TagList().tagList; 52 } 53 } 54
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。