我有这张桌子:
我在我的项目中使用这个名为NewItem的视图,在这个视图中有两个组合框.
我想这样做:
在组合框组中,存在表GROUP的所有描述,并且当我选择该描述的项目(第一组合框)时,第二组合框填充仅与我之前选择的描述相关的描述.
这是一些代码:
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;
}
}
GROUP CLASS是:
public class Group
{
public int Id { get; set; }
public string Descripion { get; set; }
}
我想指定我使用Caliburn.Micro和Dapper进行访问查询.
非常感谢 !
最佳答案 这是典型的主/细节场景,有一种典型且简单的方法可以解决它.
I.不要只在GetGroups方法中加载描述作为字符串[],而是加载enitre Group对象,或者如果有很多属性,则只创建一个只包含两个所需属性的视图模型,如下所示:
class GroupViewModel {
public int GroupId {get; set;}
public string Description {get; set;}
}
II.在NewItemViewModel中,为第二个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; } }
}
我希望你明白这个想法,这是方法的基本概要.我认为你可以通过利用Selectors Important Properties中的一些并使用其他技术来加载数据来改善它.