put*_*i26 5 wpf binding combobox caliburn.micro dapper
我有这张桌子:
我在项目中使用了称为NewItem的视图,在此视图中有两个组合框。
我想这样做:在组合框组中有表GROUP的所有Description,当我选择(第一个组合框)此描述的项目时,第二个组合框填充的描述仅与我之前选择的描述有关。
这是一些代码:
XAML NewItemView:
<ComboBox Height="21" HorizontalAlignment="Left" Margin="89,99,0,0"
VerticalAlignment="Top" Width="106" x:Name="Group" SelectedItem="{Binding SelectedGroup}" />
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
组类为:
public class Group
{
public int Id { get; set; }
public string Descripion { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想指定我将Caliburn.Micro和Dapper用于acces'query。
非常感谢 !
这是一个典型的主/细节场景,有一个典型且简单的方法来解决它。
I. 不要只在方法string[]
内部加载描述GetGroups
,而是加载整个Group
对象,或者如果有很多属性,则创建一个仅包含两个所需属性的视图模型,如下所示:
class GroupViewModel {
public int GroupId {get; set;}
public string Description {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
二. 为第二个 ComboBox添加NewItemViewModel
属性,比方说
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
三.现在在你的 中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; } }
}
Run Code Online (Sandbox Code Playgroud)
我希望您能明白,这是该方法的基本轮廓。我认为您可以通过利用一些选择器重要属性并使用其他技术来加载数据来改进它。