填充并绑定两个 WPF Caliburn.micro 的组合框

22 浏览
0 Comments

填充并绑定两个 WPF Caliburn.micro 的组合框

我有这张表:

\"enter

在我的项目中,我使用了一个名为NewItem的视图,并且在这个视图中有两个下拉框。

\"enter

我想要做到这一点:

在下拉框\"Group\"中包含表GROUP的所有\"DESCRIPTION\",当我选择了某个\"description\"(即第一个下拉框中的选项)时,第二个下拉框中将仅填充与我之前选择的description相关的另一些description。

这是一些代码:

XAML NewItemView:


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 groups = new List();
     conn.Open();
     groups = conn.Query(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;
   }
}

\"GROUP\"类是:

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

我想要指出的是,我使用了Caliburn.Micro和Dapper来访问查询。

非常感谢你!

admin 更改状态以发布 2023年5月23日
0
0 Comments

这是典型的主从场景,有一种典型且简单的解决方法。

一、不要仅仅在GetGroups方法中加载描述作为string[],而是加载整个Group对象或者如果有很多属性,创建一个视图模型仅包含所需的两个属性,就像这样:

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

二、在NewItemViewModel中添加第二个ComboBox的属性,比如:

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

三、现在在你的NewItemViewModel中,属性变成了这样:

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

希望你能理解这个想法,这是方法的基本概述。我认为你可以通过利用一些选择器的重要属性和使用其他技术来加载数据来改进它。

0