充填とバインディングの2つのコンボボックスWPF Caliburn.micro

binding caliburn.micro combobox dapper wpf

質問

私はこのテーブルを持っています:

ここに画像の説明を入力

私は私のプロジェクトでこのビューを使用してNewItemを呼び出し、このビューには2つのコンボボックスがあります。

ここに画像の説明を入力

私はこれをしたいと思います:コンボボックスグループにはテーブルGROUPのすべての記述があります。この記述のアイテム(最初のコンボボックスのもの)を選択すると、2番目のコンボボックスは前に選択した記述。

これはいくつかのコードです:

XAML NewItemView:

<ComboBox Height="21" HorizontalAlignment="Left" Margin="89,99,0,0" 
                  VerticalAlignment="Top" Width="106" x:Name="Group" SelectedItem="{Binding SelectedGroup}" />

ViewModelコードは次のようになります。

[Export(typeof(IScreen))]
public class NewItemViewModel : Screen
{
   public string SelectedGroup { get; set; }
   public String[] Group { get { return Groups; } }

   [..]


   //Constructor         
   public NewArticleViewModel()
   {
       Groups = GetGroups();
   }


   //Method
   private string[] GetGroups()
   {
     OleDbConnection conn = new OleDbConnection(StringConn);
     List<Group> groups = new List<Group>();

     conn.Open();
     groups = conn.Query<Group>(Q_SELECT_GROUPS,null,null).ToList();
     conn.Close();

     string[] array = new string[groups.Count];

     for (int i = 0; i < array.Length; i++)
     {
        array[i] = groups[i].Descripion;
     }

     return array;
   }
}

グループクラス:

public class Group 
{
    public int Id { get; set; }
    public string Descripion { get; set; }
}

私はacces'queryのためにCaliburn.MicroとDapperを使用するように指定したいと思っていました。

どうもありがとうございます !

受け入れられた回答

これは典型的なマスター/ディテールのシナリオであり、典型的で簡単な解決方法があります。

I. GetGroupsメソッド内でstring[]として記述を読み込むだけでなく、enitre Groupオブジェクトを読み込むか、または多くのプロパティがある場合は、必要な2つのプロパティのみを持つビューモデルを作成します。

class GroupViewModel {
    public int GroupId {get; set;}
    public string Description {get; set;}
}

II。 NewItemViewModelで、2番目のComboBoxのプロパティを追加します。

class NewItemViewModel {
    private ObservableCollection<SubgroupViewModel> _subgroups;
    public ObservableCollection<SubgroupViewModel> Subgroups
    {
        get {
            if (_subgroups == null)
                _subgroups = new ObservableCollection<SubgroupViewModel>();
            return _subgroups;
        }
        set {
            _subgroups = value;
            NotifyPropertyChanged("Subgroups");
        }
    }
}

III。 NewItemViewModelでは、プロパティは次のようになります。

class NewItemViewModel {
    public GroupViewModel SelectedGroup
    {
        set {
            var currentlySelected = value;
            // LOAD ALL RELATED Subgroup Descriptions FOR currentlySelected.GroupId;
            Subgroups = // LOADED Subgroup DESCRIPTIONS
        }
    }
    public ObservableCollection<GroupViewModel> Group { get { return Groups; } }
}

私はあなたがアイデアを得ることを願って、これはメソッドの基本的な概要です。 セレクタの重要なプロパティのいくつかを活用したり、データをロードするための他のテクニックを使用することで、少し改善することができると思います。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow